// export Game_Type ; export def_base_level , def_amount_of_people , def_skill_level , def_starting_resources , def_shipments_density , def_extra_oil_deposits , def_extra_sib_deposits , def_shared_vision , def_morale_flags , def_siberite_detection , def_people_respawning , def_amount_of_apemen , def_amount_of_siberit , def_public_score , def_siberite_bomb , def_builduptime , def_warrior ; export is_depot , number_of_breastworks , number_of_people , skill_level , starting_crates , starting_resources , shipments_density , amount_of_apemen , amount_of_siberit , respawning_time_min , respawning_time_max , morale_decreasing_time , battle_flags_id , desert , builduptime , inbuildup ; export def_artefact_one , def_artefact_two , def_artefact_three , def_artefact_two_using ; export Side_Count , Team_Count , Player_Side , Player_Team , Side_Teams , Teams , Side_IsSpec ; export Side_Positions , Side_Nations , Side_Names , Team_Names , Team_Game ; export depot_def , start_def , normal_oil_deposits_locations , extra_oil_deposits_locations , normal_sib_deposits_locations , extra_sib_deposits_locations , def_max_sides ; export commander ; var global_units , global_defined , soldiers_created , desert_created ; function read_multiplayer_and_game_parameters ; var side , dep , br1 , br2 , br3 , un , i ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
   4: PPUSH
   5: PPUSH
   6: PPUSH
   7: PPUSH
   8: PPUSH
   9: PPUSH
// if MultiPlayer then
  10: LD_OWVAR 4
  14: IFFALSE 88
// begin Game_Type = mp_game_type ;
  16: LD_ADDR_EXP 1
  20: PUSH
  21: LD_OWVAR 6
  25: ST_TO_ADDR
// Player_Side := mp_player_side ;
  26: LD_ADDR_EXP 41
  30: PUSH
  31: LD_OWVAR 7
  35: ST_TO_ADDR
// Player_Team := mp_player_team ;
  36: LD_ADDR_EXP 42
  40: PUSH
  41: LD_OWVAR 8
  45: ST_TO_ADDR
// Side_Positions := mp_sides_positions ;
  46: LD_ADDR_EXP 46
  50: PUSH
  51: LD_OWVAR 17
  55: ST_TO_ADDR
// Side_Teams := mp_sides_teams ;
  56: LD_ADDR_EXP 43
  60: PUSH
  61: LD_OWVAR 15
  65: ST_TO_ADDR
// Side_Nations := mp_sides_nations ;
  66: LD_ADDR_EXP 47
  70: PUSH
  71: LD_OWVAR 16
  75: ST_TO_ADDR
// Teams = mp_teams ;
  76: LD_ADDR_EXP 44
  80: PUSH
  81: LD_OWVAR 12
  85: ST_TO_ADDR
// end else
  86: GO 278
// begin Game_Type := 20 ;
  88: LD_ADDR_EXP 1
  92: PUSH
  93: LD_INT 20
  95: ST_TO_ADDR
// Player_Side := 1 ;
  96: LD_ADDR_EXP 41
 100: PUSH
 101: LD_INT 1
 103: ST_TO_ADDR
// Player_Team := 1 ;
 104: LD_ADDR_EXP 42
 108: PUSH
 109: LD_INT 1
 111: ST_TO_ADDR
// Side_Positions := [ 1 , 2 , 3 , 4 , 5 , 6 , 0 , 0 ] ;
 112: LD_ADDR_EXP 46
 116: PUSH
 117: LD_INT 1
 119: PUSH
 120: LD_INT 2
 122: PUSH
 123: LD_INT 3
 125: PUSH
 126: LD_INT 4
 128: PUSH
 129: LD_INT 5
 131: PUSH
 132: LD_INT 6
 134: PUSH
 135: LD_INT 0
 137: PUSH
 138: LD_INT 0
 140: PUSH
 141: EMPTY
 142: LIST
 143: LIST
 144: LIST
 145: LIST
 146: LIST
 147: LIST
 148: LIST
 149: LIST
 150: ST_TO_ADDR
// Side_Teams := [ 1 , 2 , 3 , 4 , 5 , 6 , 0 , 0 ] ;
 151: LD_ADDR_EXP 43
 155: PUSH
 156: LD_INT 1
 158: PUSH
 159: LD_INT 2
 161: PUSH
 162: LD_INT 3
 164: PUSH
 165: LD_INT 4
 167: PUSH
 168: LD_INT 5
 170: PUSH
 171: LD_INT 6
 173: PUSH
 174: LD_INT 0
 176: PUSH
 177: LD_INT 0
 179: PUSH
 180: EMPTY
 181: LIST
 182: LIST
 183: LIST
 184: LIST
 185: LIST
 186: LIST
 187: LIST
 188: LIST
 189: ST_TO_ADDR
// Side_Nations := [ 1 , 2 , 3 , 1 , 2 , 3 , 0 , 0 ] ;
 190: LD_ADDR_EXP 47
 194: PUSH
 195: LD_INT 1
 197: PUSH
 198: LD_INT 2
 200: PUSH
 201: LD_INT 3
 203: PUSH
 204: LD_INT 1
 206: PUSH
 207: LD_INT 2
 209: PUSH
 210: LD_INT 3
 212: PUSH
 213: LD_INT 0
 215: PUSH
 216: LD_INT 0
 218: PUSH
 219: EMPTY
 220: LIST
 221: LIST
 222: LIST
 223: LIST
 224: LIST
 225: LIST
 226: LIST
 227: LIST
 228: ST_TO_ADDR
// Teams := [ [ 1 ] , [ 2 ] , [ 3 ] , [ 4 ] , [ 5 ] , [ 6 ] ] ;
 229: LD_ADDR_EXP 44
 233: PUSH
 234: LD_INT 1
 236: PUSH
 237: EMPTY
 238: LIST
 239: PUSH
 240: LD_INT 2
 242: PUSH
 243: EMPTY
 244: LIST
 245: PUSH
 246: LD_INT 3
 248: PUSH
 249: EMPTY
 250: LIST
 251: PUSH
 252: LD_INT 4
 254: PUSH
 255: EMPTY
 256: LIST
 257: PUSH
 258: LD_INT 5
 260: PUSH
 261: EMPTY
 262: LIST
 263: PUSH
 264: LD_INT 6
 266: PUSH
 267: EMPTY
 268: LIST
 269: PUSH
 270: EMPTY
 271: LIST
 272: LIST
 273: LIST
 274: LIST
 275: LIST
 276: LIST
 277: ST_TO_ADDR
// end ; Side_IsSpec := [ false , false , false , false , false , false , false , false ] ;
 278: LD_ADDR_EXP 45
 282: PUSH
 283: LD_INT 0
 285: PUSH
 286: LD_INT 0
 288: PUSH
 289: LD_INT 0
 291: PUSH
 292: LD_INT 0
 294: PUSH
 295: LD_INT 0
 297: PUSH
 298: LD_INT 0
 300: PUSH
 301: LD_INT 0
 303: PUSH
 304: LD_INT 0
 306: PUSH
 307: EMPTY
 308: LIST
 309: LIST
 310: LIST
 311: LIST
 312: LIST
 313: LIST
 314: LIST
 315: LIST
 316: ST_TO_ADDR
// Side_Count = ( Side_Positions diff [ 0 ] ) + 0 ;
 317: LD_ADDR_EXP 39
 321: PUSH
 322: LD_EXP 46
 326: PUSH
 327: LD_INT 0
 329: PUSH
 330: EMPTY
 331: LIST
 332: DIFF
 333: PUSH
 334: LD_INT 0
 336: PLUS
 337: ST_TO_ADDR
// Team_Count = ( Side_Teams diff [ 0 ] ) + 0 ;
 338: LD_ADDR_EXP 40
 342: PUSH
 343: LD_EXP 43
 347: PUSH
 348: LD_INT 0
 350: PUSH
 351: EMPTY
 352: LIST
 353: DIFF
 354: PUSH
 355: LD_INT 0
 357: PLUS
 358: ST_TO_ADDR
// if MultiPlayer then
 359: LD_OWVAR 4
 363: IFFALSE 608
// begin def_base_level := GetMultiplayerSetting ( 0 ) ;
 365: LD_ADDR_EXP 2
 369: PUSH
 370: LD_INT 0
 372: PPUSH
 373: CALL_OW 426
 377: ST_TO_ADDR
// def_amount_of_people := GetMultiplayerSetting ( 1 ) ;
 378: LD_ADDR_EXP 3
 382: PUSH
 383: LD_INT 1
 385: PPUSH
 386: CALL_OW 426
 390: ST_TO_ADDR
// def_skill_level := GetMultiplayerSetting ( 2 ) ;
 391: LD_ADDR_EXP 4
 395: PUSH
 396: LD_INT 2
 398: PPUSH
 399: CALL_OW 426
 403: ST_TO_ADDR
// def_starting_resources := GetMultiplayerSetting ( 3 ) ;
 404: LD_ADDR_EXP 5
 408: PUSH
 409: LD_INT 3
 411: PPUSH
 412: CALL_OW 426
 416: ST_TO_ADDR
// def_shipments_density := GetMultiplayerSetting ( 4 ) ;
 417: LD_ADDR_EXP 6
 421: PUSH
 422: LD_INT 4
 424: PPUSH
 425: CALL_OW 426
 429: ST_TO_ADDR
// def_extra_oil_deposits := GetMultiplayerSetting ( 5 ) ;
 430: LD_ADDR_EXP 7
 434: PUSH
 435: LD_INT 5
 437: PPUSH
 438: CALL_OW 426
 442: ST_TO_ADDR
// def_extra_sib_deposits := GetMultiplayerSetting ( 6 ) ;
 443: LD_ADDR_EXP 8
 447: PUSH
 448: LD_INT 6
 450: PPUSH
 451: CALL_OW 426
 455: ST_TO_ADDR
// if Game_Type = 20 then
 456: LD_EXP 1
 460: PUSH
 461: LD_INT 20
 463: EQUAL
 464: IFFALSE 476
// def_shared_vision := false else
 466: LD_ADDR_EXP 9
 470: PUSH
 471: LD_INT 0
 473: ST_TO_ADDR
 474: GO 489
// def_shared_vision := GetMultiplayerSetting ( 10 ) ;
 476: LD_ADDR_EXP 9
 480: PUSH
 481: LD_INT 10
 483: PPUSH
 484: CALL_OW 426
 488: ST_TO_ADDR
// def_morale_flags := GetMultiplayerSetting ( 11 ) ;
 489: LD_ADDR_EXP 10
 493: PUSH
 494: LD_INT 11
 496: PPUSH
 497: CALL_OW 426
 501: ST_TO_ADDR
// def_siberite_detection := GetMultiplayerSetting ( 12 ) ;
 502: LD_ADDR_EXP 11
 506: PUSH
 507: LD_INT 12
 509: PPUSH
 510: CALL_OW 426
 514: ST_TO_ADDR
// def_people_respawning := GetMultiplayerSetting ( 13 ) ;
 515: LD_ADDR_EXP 12
 519: PUSH
 520: LD_INT 13
 522: PPUSH
 523: CALL_OW 426
 527: ST_TO_ADDR
// def_amount_of_apemen := GetMultiplayerSetting ( 14 ) ;
 528: LD_ADDR_EXP 13
 532: PUSH
 533: LD_INT 14
 535: PPUSH
 536: CALL_OW 426
 540: ST_TO_ADDR
// def_amount_of_siberit := GetMultiplayerSetting ( 15 ) ;
 541: LD_ADDR_EXP 14
 545: PUSH
 546: LD_INT 15
 548: PPUSH
 549: CALL_OW 426
 553: ST_TO_ADDR
// def_public_score := GetMultiplayerSetting ( 16 ) ;
 554: LD_ADDR_EXP 15
 558: PUSH
 559: LD_INT 16
 561: PPUSH
 562: CALL_OW 426
 566: ST_TO_ADDR
// def_siberite_bomb := GetMultiplayerSetting ( 17 ) ;
 567: LD_ADDR_EXP 16
 571: PUSH
 572: LD_INT 17
 574: PPUSH
 575: CALL_OW 426
 579: ST_TO_ADDR
// def_builduptime := GetMultiplayerSetting ( 20 ) ;
 580: LD_ADDR_EXP 17
 584: PUSH
 585: LD_INT 20
 587: PPUSH
 588: CALL_OW 426
 592: ST_TO_ADDR
// def_warrior := GetMultiplayerSetting ( 26 ) ;
 593: LD_ADDR_EXP 18
 597: PUSH
 598: LD_INT 26
 600: PPUSH
 601: CALL_OW 426
 605: ST_TO_ADDR
// end else
 606: GO 748
// begin randomize ;
 608: CALL_OW 10
// def_base_level := 2 ;
 612: LD_ADDR_EXP 2
 616: PUSH
 617: LD_INT 2
 619: ST_TO_ADDR
// def_amount_of_people := 0 ;
 620: LD_ADDR_EXP 3
 624: PUSH
 625: LD_INT 0
 627: ST_TO_ADDR
// def_skill_level := 1 ;
 628: LD_ADDR_EXP 4
 632: PUSH
 633: LD_INT 1
 635: ST_TO_ADDR
// def_starting_resources := 2 ;
 636: LD_ADDR_EXP 5
 640: PUSH
 641: LD_INT 2
 643: ST_TO_ADDR
// def_shipments_density := 1 ;
 644: LD_ADDR_EXP 6
 648: PUSH
 649: LD_INT 1
 651: ST_TO_ADDR
// def_extra_oil_deposits := 0 ;
 652: LD_ADDR_EXP 7
 656: PUSH
 657: LD_INT 0
 659: ST_TO_ADDR
// def_extra_sib_deposits := 1 ;
 660: LD_ADDR_EXP 8
 664: PUSH
 665: LD_INT 1
 667: ST_TO_ADDR
// def_shared_vision := 1 ;
 668: LD_ADDR_EXP 9
 672: PUSH
 673: LD_INT 1
 675: ST_TO_ADDR
// def_morale_flags := 1 ;
 676: LD_ADDR_EXP 10
 680: PUSH
 681: LD_INT 1
 683: ST_TO_ADDR
// def_siberite_detection := 1 ;
 684: LD_ADDR_EXP 11
 688: PUSH
 689: LD_INT 1
 691: ST_TO_ADDR
// def_people_respawning := 2 ;
 692: LD_ADDR_EXP 12
 696: PUSH
 697: LD_INT 2
 699: ST_TO_ADDR
// def_amount_of_apemen := 3 ;
 700: LD_ADDR_EXP 13
 704: PUSH
 705: LD_INT 3
 707: ST_TO_ADDR
// def_amount_of_siberit := 0 ;
 708: LD_ADDR_EXP 14
 712: PUSH
 713: LD_INT 0
 715: ST_TO_ADDR
// def_public_score := 1 ;
 716: LD_ADDR_EXP 15
 720: PUSH
 721: LD_INT 1
 723: ST_TO_ADDR
// def_siberite_bomb := 0 ;
 724: LD_ADDR_EXP 16
 728: PUSH
 729: LD_INT 0
 731: ST_TO_ADDR
// def_builduptime := 1 ;
 732: LD_ADDR_EXP 17
 736: PUSH
 737: LD_INT 1
 739: ST_TO_ADDR
// def_warrior := 1 ;
 740: LD_ADDR_EXP 18
 744: PUSH
 745: LD_INT 1
 747: ST_TO_ADDR
// end ; if ( Game_Type = 10 ) or ( Game_Type = 11 ) then
 748: LD_EXP 1
 752: PUSH
 753: LD_INT 10
 755: EQUAL
 756: PUSH
 757: LD_EXP 1
 761: PUSH
 762: LD_INT 11
 764: EQUAL
 765: OR
 766: IFFALSE 916
// begin def_base_level := 2 ;
 768: LD_ADDR_EXP 2
 772: PUSH
 773: LD_INT 2
 775: ST_TO_ADDR
// def_amount_of_people := 2 ;
 776: LD_ADDR_EXP 3
 780: PUSH
 781: LD_INT 2
 783: ST_TO_ADDR
// def_skill_level := 1 ;
 784: LD_ADDR_EXP 4
 788: PUSH
 789: LD_INT 1
 791: ST_TO_ADDR
// def_starting_resources := 2 ;
 792: LD_ADDR_EXP 5
 796: PUSH
 797: LD_INT 2
 799: ST_TO_ADDR
// def_shipments_density := 1 ;
 800: LD_ADDR_EXP 6
 804: PUSH
 805: LD_INT 1
 807: ST_TO_ADDR
// def_extra_oil_deposits := 0 ;
 808: LD_ADDR_EXP 7
 812: PUSH
 813: LD_INT 0
 815: ST_TO_ADDR
// def_extra_sib_deposits := 1 ;
 816: LD_ADDR_EXP 8
 820: PUSH
 821: LD_INT 1
 823: ST_TO_ADDR
// if Game_Type = 10 then
 824: LD_EXP 1
 828: PUSH
 829: LD_INT 10
 831: EQUAL
 832: IFFALSE 844
// def_shared_vision := false else
 834: LD_ADDR_EXP 9
 838: PUSH
 839: LD_INT 0
 841: ST_TO_ADDR
 842: GO 852
// def_shared_vision := 1 ;
 844: LD_ADDR_EXP 9
 848: PUSH
 849: LD_INT 1
 851: ST_TO_ADDR
// def_morale_flags := 3 ;
 852: LD_ADDR_EXP 10
 856: PUSH
 857: LD_INT 3
 859: ST_TO_ADDR
// def_siberite_detection := 1 ;
 860: LD_ADDR_EXP 11
 864: PUSH
 865: LD_INT 1
 867: ST_TO_ADDR
// def_people_respawning := 1 ;
 868: LD_ADDR_EXP 12
 872: PUSH
 873: LD_INT 1
 875: ST_TO_ADDR
// def_amount_of_apemen := 2 ;
 876: LD_ADDR_EXP 13
 880: PUSH
 881: LD_INT 2
 883: ST_TO_ADDR
// def_siberite_bomb := 0 ;
 884: LD_ADDR_EXP 16
 888: PUSH
 889: LD_INT 0
 891: ST_TO_ADDR
// def_builduptime := 2 ;
 892: LD_ADDR_EXP 17
 896: PUSH
 897: LD_INT 2
 899: ST_TO_ADDR
// def_public_score := 1 ;
 900: LD_ADDR_EXP 15
 904: PUSH
 905: LD_INT 1
 907: ST_TO_ADDR
// def_warrior := 1 ;
 908: LD_ADDR_EXP 18
 912: PUSH
 913: LD_INT 1
 915: ST_TO_ADDR
// end ; is_depot := [ 0 , 1 , 1 ] [ def_base_level + 1 ] ;
 916: LD_ADDR_EXP 19
 920: PUSH
 921: LD_INT 0
 923: PUSH
 924: LD_INT 1
 926: PUSH
 927: LD_INT 1
 929: PUSH
 930: EMPTY
 931: LIST
 932: LIST
 933: LIST
 934: PUSH
 935: LD_EXP 2
 939: PUSH
 940: LD_INT 1
 942: PLUS
 943: ARRAY
 944: ST_TO_ADDR
// number_of_breastworks := [ 0 , 0 , 0 ] [ def_base_level + 1 ] ;
 945: LD_ADDR_EXP 20
 949: PUSH
 950: LD_INT 0
 952: PUSH
 953: LD_INT 0
 955: PUSH
 956: LD_INT 0
 958: PUSH
 959: EMPTY
 960: LIST
 961: LIST
 962: LIST
 963: PUSH
 964: LD_EXP 2
 968: PUSH
 969: LD_INT 1
 971: PLUS
 972: ARRAY
 973: ST_TO_ADDR
// number_of_people := [ 7 , 13 , 16 , 19 , 23 ] [ def_amount_of_people + 1 ] ;
 974: LD_ADDR_EXP 21
 978: PUSH
 979: LD_INT 7
 981: PUSH
 982: LD_INT 13
 984: PUSH
 985: LD_INT 16
 987: PUSH
 988: LD_INT 19
 990: PUSH
 991: LD_INT 23
 993: PUSH
 994: EMPTY
 995: LIST
 996: LIST
 997: LIST
 998: LIST
 999: LIST
1000: PUSH
1001: LD_EXP 3
1005: PUSH
1006: LD_INT 1
1008: PLUS
1009: ARRAY
1010: ST_TO_ADDR
// skill_level := [ 0 , 1 , 2 , 5 ] [ def_skill_level + 1 ] ;
1011: LD_ADDR_EXP 22
1015: PUSH
1016: LD_INT 0
1018: PUSH
1019: LD_INT 1
1021: PUSH
1022: LD_INT 2
1024: PUSH
1025: LD_INT 5
1027: PUSH
1028: EMPTY
1029: LIST
1030: LIST
1031: LIST
1032: LIST
1033: PUSH
1034: LD_EXP 4
1038: PUSH
1039: LD_INT 1
1041: PLUS
1042: ARRAY
1043: ST_TO_ADDR
// starting_resources := [ [ 0 , 0 , 0 ] , [ 30 , 0 , 0 ] , [ 80 , 40 , 0 ] , [ 120 , 60 , 20 ] ] [ def_starting_resources + 1 ] ;
1044: LD_ADDR_EXP 24
1048: PUSH
1049: LD_INT 0
1051: PUSH
1052: LD_INT 0
1054: PUSH
1055: LD_INT 0
1057: PUSH
1058: EMPTY
1059: LIST
1060: LIST
1061: LIST
1062: PUSH
1063: LD_INT 30
1065: PUSH
1066: LD_INT 0
1068: PUSH
1069: LD_INT 0
1071: PUSH
1072: EMPTY
1073: LIST
1074: LIST
1075: LIST
1076: PUSH
1077: LD_INT 80
1079: PUSH
1080: LD_INT 40
1082: PUSH
1083: LD_INT 0
1085: PUSH
1086: EMPTY
1087: LIST
1088: LIST
1089: LIST
1090: PUSH
1091: LD_INT 120
1093: PUSH
1094: LD_INT 60
1096: PUSH
1097: LD_INT 20
1099: PUSH
1100: EMPTY
1101: LIST
1102: LIST
1103: LIST
1104: PUSH
1105: EMPTY
1106: LIST
1107: LIST
1108: LIST
1109: LIST
1110: PUSH
1111: LD_EXP 5
1115: PUSH
1116: LD_INT 1
1118: PLUS
1119: ARRAY
1120: ST_TO_ADDR
// starting_crates := [ [ 10 ] , [ 7 , 14 ] , [ 6 , 12 , 18 ] , [ 5 , 10 , 15 , 20 ] ] [ def_starting_resources + 1 ] ;
1121: LD_ADDR_EXP 23
1125: PUSH
1126: LD_INT 10
1128: PUSH
1129: EMPTY
1130: LIST
1131: PUSH
1132: LD_INT 7
1134: PUSH
1135: LD_INT 14
1137: PUSH
1138: EMPTY
1139: LIST
1140: LIST
1141: PUSH
1142: LD_INT 6
1144: PUSH
1145: LD_INT 12
1147: PUSH
1148: LD_INT 18
1150: PUSH
1151: EMPTY
1152: LIST
1153: LIST
1154: LIST
1155: PUSH
1156: LD_INT 5
1158: PUSH
1159: LD_INT 10
1161: PUSH
1162: LD_INT 15
1164: PUSH
1165: LD_INT 20
1167: PUSH
1168: EMPTY
1169: LIST
1170: LIST
1171: LIST
1172: LIST
1173: PUSH
1174: EMPTY
1175: LIST
1176: LIST
1177: LIST
1178: LIST
1179: PUSH
1180: LD_EXP 5
1184: PUSH
1185: LD_INT 1
1187: PLUS
1188: ARRAY
1189: ST_TO_ADDR
// shipments_density := [ 130 , 100 , 70 ] [ def_shipments_density + 1 ] ;
1190: LD_ADDR_EXP 25
1194: PUSH
1195: LD_INT 130
1197: PUSH
1198: LD_INT 100
1200: PUSH
1201: LD_INT 70
1203: PUSH
1204: EMPTY
1205: LIST
1206: LIST
1207: LIST
1208: PUSH
1209: LD_EXP 6
1213: PUSH
1214: LD_INT 1
1216: PLUS
1217: ARRAY
1218: ST_TO_ADDR
// respawning_time_min := [ 0 0$0 , 5 5$00 , 1 1$0 , 2 2$0 ] [ def_people_respawning + 1 ] ;
1219: LD_ADDR_EXP 28
1223: PUSH
1224: LD_INT 0
1226: PUSH
1227: LD_INT 10500
1229: PUSH
1230: LD_INT 2100
1232: PUSH
1233: LD_INT 4200
1235: PUSH
1236: EMPTY
1237: LIST
1238: LIST
1239: LIST
1240: LIST
1241: PUSH
1242: LD_EXP 12
1246: PUSH
1247: LD_INT 1
1249: PLUS
1250: ARRAY
1251: ST_TO_ADDR
// respawning_time_max := [ 0 0$0 , 10 10$00 , 2 2$0 , 3 3$0 ] [ def_people_respawning + 1 ] ;
1252: LD_ADDR_EXP 29
1256: PUSH
1257: LD_INT 0
1259: PUSH
1260: LD_INT 21000
1262: PUSH
1263: LD_INT 4200
1265: PUSH
1266: LD_INT 6300
1268: PUSH
1269: EMPTY
1270: LIST
1271: LIST
1272: LIST
1273: LIST
1274: PUSH
1275: LD_EXP 12
1279: PUSH
1280: LD_INT 1
1282: PLUS
1283: ARRAY
1284: ST_TO_ADDR
// amount_of_apemen := [ 0 , 5 , 10 , 15 ] [ def_amount_of_apemen + 1 ] ;
1285: LD_ADDR_EXP 26
1289: PUSH
1290: LD_INT 0
1292: PUSH
1293: LD_INT 5
1295: PUSH
1296: LD_INT 10
1298: PUSH
1299: LD_INT 15
1301: PUSH
1302: EMPTY
1303: LIST
1304: LIST
1305: LIST
1306: LIST
1307: PUSH
1308: LD_EXP 13
1312: PUSH
1313: LD_INT 1
1315: PLUS
1316: ARRAY
1317: ST_TO_ADDR
// amount_of_siberit := [ 30 , 50 , 80 , 100 , 130 , 150 , 200 ] [ def_amount_of_siberit + 1 ] ;
1318: LD_ADDR_EXP 27
1322: PUSH
1323: LD_INT 30
1325: PUSH
1326: LD_INT 50
1328: PUSH
1329: LD_INT 80
1331: PUSH
1332: LD_INT 100
1334: PUSH
1335: LD_INT 130
1337: PUSH
1338: LD_INT 150
1340: PUSH
1341: LD_INT 200
1343: PUSH
1344: EMPTY
1345: LIST
1346: LIST
1347: LIST
1348: LIST
1349: LIST
1350: LIST
1351: LIST
1352: PUSH
1353: LD_EXP 14
1357: PUSH
1358: LD_INT 1
1360: PLUS
1361: ARRAY
1362: ST_TO_ADDR
// morale_decreasing_time = [ - 1 , 0 0$10 , 0 0$20 , 0 0$40 , 0 0$0 ] [ def_morale_flags + 1 ] ;
1363: LD_ADDR_EXP 30
1367: PUSH
1368: LD_INT 1
1370: NEG
1371: PUSH
1372: LD_INT 350
1374: PUSH
1375: LD_INT 700
1377: PUSH
1378: LD_INT 1400
1380: PUSH
1381: LD_INT 0
1383: PUSH
1384: EMPTY
1385: LIST
1386: LIST
1387: LIST
1388: LIST
1389: LIST
1390: PUSH
1391: LD_EXP 10
1395: PUSH
1396: LD_INT 1
1398: PLUS
1399: ARRAY
1400: ST_TO_ADDR
// battle_flags_id = [ ] ;
1401: LD_ADDR_EXP 31
1405: PUSH
1406: EMPTY
1407: ST_TO_ADDR
// if def_builduptime > 0 then
1408: LD_EXP 17
1412: PUSH
1413: LD_INT 0
1415: GREATER
1416: IFFALSE 1426
// inbuildup := true ;
1418: LD_ADDR_EXP 34
1422: PUSH
1423: LD_INT 1
1425: ST_TO_ADDR
// normal_oil_deposits_locations := [ [ 20 , 30 ] , [ 21 , 35 ] , [ 10 , 16 ] , [ 100 , 20 ] , [ 107 , 30 ] , [ 109 , 36 ] ] ;
1426: LD_ADDR_EXP 53
1430: PUSH
1431: LD_INT 20
1433: PUSH
1434: LD_INT 30
1436: PUSH
1437: EMPTY
1438: LIST
1439: LIST
1440: PUSH
1441: LD_INT 21
1443: PUSH
1444: LD_INT 35
1446: PUSH
1447: EMPTY
1448: LIST
1449: LIST
1450: PUSH
1451: LD_INT 10
1453: PUSH
1454: LD_INT 16
1456: PUSH
1457: EMPTY
1458: LIST
1459: LIST
1460: PUSH
1461: LD_INT 100
1463: PUSH
1464: LD_INT 20
1466: PUSH
1467: EMPTY
1468: LIST
1469: LIST
1470: PUSH
1471: LD_INT 107
1473: PUSH
1474: LD_INT 30
1476: PUSH
1477: EMPTY
1478: LIST
1479: LIST
1480: PUSH
1481: LD_INT 109
1483: PUSH
1484: LD_INT 36
1486: PUSH
1487: EMPTY
1488: LIST
1489: LIST
1490: PUSH
1491: EMPTY
1492: LIST
1493: LIST
1494: LIST
1495: LIST
1496: LIST
1497: LIST
1498: ST_TO_ADDR
// normal_sib_deposits_locations := [ [ 8 , 9 ] , [ 40 , 30 ] , [ 31 , 48 ] , [ 109 , 47 ] , [ 92 , 7 ] , [ 83 , 33 ] ] ;
1499: LD_ADDR_EXP 55
1503: PUSH
1504: LD_INT 8
1506: PUSH
1507: LD_INT 9
1509: PUSH
1510: EMPTY
1511: LIST
1512: LIST
1513: PUSH
1514: LD_INT 40
1516: PUSH
1517: LD_INT 30
1519: PUSH
1520: EMPTY
1521: LIST
1522: LIST
1523: PUSH
1524: LD_INT 31
1526: PUSH
1527: LD_INT 48
1529: PUSH
1530: EMPTY
1531: LIST
1532: LIST
1533: PUSH
1534: LD_INT 109
1536: PUSH
1537: LD_INT 47
1539: PUSH
1540: EMPTY
1541: LIST
1542: LIST
1543: PUSH
1544: LD_INT 92
1546: PUSH
1547: LD_INT 7
1549: PUSH
1550: EMPTY
1551: LIST
1552: LIST
1553: PUSH
1554: LD_INT 83
1556: PUSH
1557: LD_INT 33
1559: PUSH
1560: EMPTY
1561: LIST
1562: LIST
1563: PUSH
1564: EMPTY
1565: LIST
1566: LIST
1567: LIST
1568: LIST
1569: LIST
1570: LIST
1571: ST_TO_ADDR
// depot_def := [ [ 23 , 28 , 3 ] , [ 28 , 25 , 0 ] , [ 32 , 32 , 4 ] , [ 99 , 32 , 5 ] , [ 91 , 27 , 0 ] , [ 90 , 34 , 2 ] ] ;
1572: LD_ADDR_EXP 51
1576: PUSH
1577: LD_INT 23
1579: PUSH
1580: LD_INT 28
1582: PUSH
1583: LD_INT 3
1585: PUSH
1586: EMPTY
1587: LIST
1588: LIST
1589: LIST
1590: PUSH
1591: LD_INT 28
1593: PUSH
1594: LD_INT 25
1596: PUSH
1597: LD_INT 0
1599: PUSH
1600: EMPTY
1601: LIST
1602: LIST
1603: LIST
1604: PUSH
1605: LD_INT 32
1607: PUSH
1608: LD_INT 32
1610: PUSH
1611: LD_INT 4
1613: PUSH
1614: EMPTY
1615: LIST
1616: LIST
1617: LIST
1618: PUSH
1619: LD_INT 99
1621: PUSH
1622: LD_INT 32
1624: PUSH
1625: LD_INT 5
1627: PUSH
1628: EMPTY
1629: LIST
1630: LIST
1631: LIST
1632: PUSH
1633: LD_INT 91
1635: PUSH
1636: LD_INT 27
1638: PUSH
1639: LD_INT 0
1641: PUSH
1642: EMPTY
1643: LIST
1644: LIST
1645: LIST
1646: PUSH
1647: LD_INT 90
1649: PUSH
1650: LD_INT 34
1652: PUSH
1653: LD_INT 2
1655: PUSH
1656: EMPTY
1657: LIST
1658: LIST
1659: LIST
1660: PUSH
1661: EMPTY
1662: LIST
1663: LIST
1664: LIST
1665: LIST
1666: LIST
1667: LIST
1668: ST_TO_ADDR
// start_def := [ [ 15 , 15 ] , [ 16 , 16 ] , [ 17 , 17 ] , [ 100 , 45 ] , [ 102 , 43 ] , [ 103 , 42 ] ] ;
1669: LD_ADDR_EXP 52
1673: PUSH
1674: LD_INT 15
1676: PUSH
1677: LD_INT 15
1679: PUSH
1680: EMPTY
1681: LIST
1682: LIST
1683: PUSH
1684: LD_INT 16
1686: PUSH
1687: LD_INT 16
1689: PUSH
1690: EMPTY
1691: LIST
1692: LIST
1693: PUSH
1694: LD_INT 17
1696: PUSH
1697: LD_INT 17
1699: PUSH
1700: EMPTY
1701: LIST
1702: LIST
1703: PUSH
1704: LD_INT 100
1706: PUSH
1707: LD_INT 45
1709: PUSH
1710: EMPTY
1711: LIST
1712: LIST
1713: PUSH
1714: LD_INT 102
1716: PUSH
1717: LD_INT 43
1719: PUSH
1720: EMPTY
1721: LIST
1722: LIST
1723: PUSH
1724: LD_INT 103
1726: PUSH
1727: LD_INT 42
1729: PUSH
1730: EMPTY
1731: LIST
1732: LIST
1733: PUSH
1734: EMPTY
1735: LIST
1736: LIST
1737: LIST
1738: LIST
1739: LIST
1740: LIST
1741: ST_TO_ADDR
// end ;
1742: LD_VAR 0 1
1746: RET
// function init_map ; var i , j ; begin
1747: LD_INT 0
1749: PPUSH
1750: PPUSH
1751: PPUSH
// for i := 1 to 8 do
1752: LD_ADDR_VAR 0 2
1756: PUSH
1757: DOUBLE
1758: LD_INT 1
1760: DEC
1761: ST_TO_ADDR
1762: LD_INT 8
1764: PUSH
1765: FOR_TO
1766: IFFALSE 1910
// if Side_Positions [ i ] <> 0 then
1768: LD_EXP 46
1772: PUSH
1773: LD_VAR 0 2
1777: ARRAY
1778: PUSH
1779: LD_INT 0
1781: NONEQUAL
1782: IFFALSE 1908
// if not Side_IsSpec [ i ] then
1784: LD_EXP 45
1788: PUSH
1789: LD_VAR 0 2
1793: ARRAY
1794: NOT
1795: IFFALSE 1908
// if def_extra_oil_deposits then
1797: LD_EXP 7
1801: IFFALSE 1859
// for j in extra_oil_deposits_locations [ Side_Positions [ i ] ] do
1803: LD_ADDR_VAR 0 3
1807: PUSH
1808: LD_EXP 54
1812: PUSH
1813: LD_EXP 46
1817: PUSH
1818: LD_VAR 0 2
1822: ARRAY
1823: ARRAY
1824: PUSH
1825: FOR_IN
1826: IFFALSE 1855
// CreateDepositXY ( j [ 1 ] , j [ 2 ] , mat_oil ) else
1828: LD_VAR 0 3
1832: PUSH
1833: LD_INT 1
1835: ARRAY
1836: PPUSH
1837: LD_VAR 0 3
1841: PUSH
1842: LD_INT 2
1844: ARRAY
1845: PPUSH
1846: LD_INT 2
1848: PPUSH
1849: CALL_OW 62
1853: GO 1825
1855: POP
1856: POP
1857: GO 1908
// CreateDepositXY ( normal_oil_deposits_locations [ Side_Positions [ i ] ] [ 1 ] , normal_oil_deposits_locations [ Side_Positions [ i ] ] [ 2 ] , mat_oil ) ;
1859: LD_EXP 53
1863: PUSH
1864: LD_EXP 46
1868: PUSH
1869: LD_VAR 0 2
1873: ARRAY
1874: ARRAY
1875: PUSH
1876: LD_INT 1
1878: ARRAY
1879: PPUSH
1880: LD_EXP 53
1884: PUSH
1885: LD_EXP 46
1889: PUSH
1890: LD_VAR 0 2
1894: ARRAY
1895: ARRAY
1896: PUSH
1897: LD_INT 2
1899: ARRAY
1900: PPUSH
1901: LD_INT 2
1903: PPUSH
1904: CALL_OW 62
1908: GO 1765
1910: POP
1911: POP
// if def_extra_sib_deposits then
1912: LD_EXP 8
1916: IFFALSE 2082
// for i := 1 to 8 do
1918: LD_ADDR_VAR 0 2
1922: PUSH
1923: DOUBLE
1924: LD_INT 1
1926: DEC
1927: ST_TO_ADDR
1928: LD_INT 8
1930: PUSH
1931: FOR_TO
1932: IFFALSE 2080
// if Side_Positions [ i ] <> 0 then
1934: LD_EXP 46
1938: PUSH
1939: LD_VAR 0 2
1943: ARRAY
1944: PUSH
1945: LD_INT 0
1947: NONEQUAL
1948: IFFALSE 2078
// if not Side_IsSpec [ i ] then
1950: LD_EXP 45
1954: PUSH
1955: LD_VAR 0 2
1959: ARRAY
1960: NOT
1961: IFFALSE 2078
// if def_extra_sib_deposits = 2 then
1963: LD_EXP 8
1967: PUSH
1968: LD_INT 2
1970: EQUAL
1971: IFFALSE 2029
// for j in extra_sib_deposits_locations [ Side_Positions [ i ] ] do
1973: LD_ADDR_VAR 0 3
1977: PUSH
1978: LD_EXP 56
1982: PUSH
1983: LD_EXP 46
1987: PUSH
1988: LD_VAR 0 2
1992: ARRAY
1993: ARRAY
1994: PUSH
1995: FOR_IN
1996: IFFALSE 2025
// CreateDepositXY ( j [ 1 ] , j [ 2 ] , mat_siberit ) else
1998: LD_VAR 0 3
2002: PUSH
2003: LD_INT 1
2005: ARRAY
2006: PPUSH
2007: LD_VAR 0 3
2011: PUSH
2012: LD_INT 2
2014: ARRAY
2015: PPUSH
2016: LD_INT 3
2018: PPUSH
2019: CALL_OW 62
2023: GO 1995
2025: POP
2026: POP
2027: GO 2078
// CreateDepositXY ( normal_sib_deposits_locations [ Side_Positions [ i ] ] [ 1 ] , normal_sib_deposits_locations [ Side_Positions [ i ] ] [ 2 ] , mat_siberit ) ;
2029: LD_EXP 55
2033: PUSH
2034: LD_EXP 46
2038: PUSH
2039: LD_VAR 0 2
2043: ARRAY
2044: ARRAY
2045: PUSH
2046: LD_INT 1
2048: ARRAY
2049: PPUSH
2050: LD_EXP 55
2054: PUSH
2055: LD_EXP 46
2059: PUSH
2060: LD_VAR 0 2
2064: ARRAY
2065: ARRAY
2066: PUSH
2067: LD_INT 2
2069: ARRAY
2070: PPUSH
2071: LD_INT 3
2073: PPUSH
2074: CALL_OW 62
2078: GO 1931
2080: POP
2081: POP
// end ;
2082: LD_VAR 0 1
2086: RET
// function set_shared_visions_and_alliances ; var i , j ; begin
2087: LD_INT 0
2089: PPUSH
2090: PPUSH
2091: PPUSH
// Team_Game := 0 ;
2092: LD_ADDR_EXP 50
2096: PUSH
2097: LD_INT 0
2099: ST_TO_ADDR
// for i = 1 to 8 do
2100: LD_ADDR_VAR 0 2
2104: PUSH
2105: DOUBLE
2106: LD_INT 1
2108: DEC
2109: ST_TO_ADDR
2110: LD_INT 8
2112: PUSH
2113: FOR_TO
2114: IFFALSE 2140
// Team_Game := Team_Game + Side_Teams [ i ] ;
2116: LD_ADDR_EXP 50
2120: PUSH
2121: LD_EXP 50
2125: PUSH
2126: LD_EXP 43
2130: PUSH
2131: LD_VAR 0 2
2135: ARRAY
2136: PLUS
2137: ST_TO_ADDR
2138: GO 2113
2140: POP
2141: POP
// if not Team_Game then
2142: LD_EXP 50
2146: NOT
2147: IFFALSE 2159
// Team_Game := false else
2149: LD_ADDR_EXP 50
2153: PUSH
2154: LD_INT 0
2156: ST_TO_ADDR
2157: GO 2167
// Team_Game := true ;
2159: LD_ADDR_EXP 50
2163: PUSH
2164: LD_INT 1
2166: ST_TO_ADDR
// if not Team_Game then
2167: LD_EXP 50
2171: NOT
2172: IFFALSE 2270
// begin for i = 1 to 8 do
2174: LD_ADDR_VAR 0 2
2178: PUSH
2179: DOUBLE
2180: LD_INT 1
2182: DEC
2183: ST_TO_ADDR
2184: LD_INT 8
2186: PUSH
2187: FOR_TO
2188: IFFALSE 2266
// for j = 1 to 8 do
2190: LD_ADDR_VAR 0 3
2194: PUSH
2195: DOUBLE
2196: LD_INT 1
2198: DEC
2199: ST_TO_ADDR
2200: LD_INT 8
2202: PUSH
2203: FOR_TO
2204: IFFALSE 2262
// if i <> j then
2206: LD_VAR 0 2
2210: PUSH
2211: LD_VAR 0 3
2215: NONEQUAL
2216: IFFALSE 2240
// SetAttitude ( i , j , att_neutral , true ) else
2218: LD_VAR 0 2
2222: PPUSH
2223: LD_VAR 0 3
2227: PPUSH
2228: LD_INT 0
2230: PPUSH
2231: LD_INT 1
2233: PPUSH
2234: CALL_OW 80
2238: GO 2260
// SetAttitude ( i , j , att_friend , true ) ;
2240: LD_VAR 0 2
2244: PPUSH
2245: LD_VAR 0 3
2249: PPUSH
2250: LD_INT 1
2252: PPUSH
2253: LD_INT 1
2255: PPUSH
2256: CALL_OW 80
2260: GO 2203
2262: POP
2263: POP
2264: GO 2187
2266: POP
2267: POP
// end else
2268: GO 2445
// begin if def_shared_vision then
2270: LD_EXP 9
2274: IFFALSE 2339
// begin for i in Teams do
2276: LD_ADDR_VAR 0 2
2280: PUSH
2281: LD_EXP 44
2285: PUSH
2286: FOR_IN
2287: IFFALSE 2337
// for j = 2 to i do
2289: LD_ADDR_VAR 0 3
2293: PUSH
2294: DOUBLE
2295: LD_INT 2
2297: DEC
2298: ST_TO_ADDR
2299: LD_VAR 0 2
2303: PUSH
2304: FOR_TO
2305: IFFALSE 2333
// ChangeSideFog ( i [ j ] , i [ 1 ] ) ;
2307: LD_VAR 0 2
2311: PUSH
2312: LD_VAR 0 3
2316: ARRAY
2317: PPUSH
2318: LD_VAR 0 2
2322: PUSH
2323: LD_INT 1
2325: ARRAY
2326: PPUSH
2327: CALL_OW 343
2331: GO 2304
2333: POP
2334: POP
2335: GO 2286
2337: POP
2338: POP
// end ; for i = 1 to 8 do
2339: LD_ADDR_VAR 0 2
2343: PUSH
2344: DOUBLE
2345: LD_INT 1
2347: DEC
2348: ST_TO_ADDR
2349: LD_INT 8
2351: PUSH
2352: FOR_TO
2353: IFFALSE 2443
// for j = 1 to 8 do
2355: LD_ADDR_VAR 0 3
2359: PUSH
2360: DOUBLE
2361: LD_INT 1
2363: DEC
2364: ST_TO_ADDR
2365: LD_INT 8
2367: PUSH
2368: FOR_TO
2369: IFFALSE 2439
// if Side_Teams [ i ] = Side_Teams [ j ] then
2371: LD_EXP 43
2375: PUSH
2376: LD_VAR 0 2
2380: ARRAY
2381: PUSH
2382: LD_EXP 43
2386: PUSH
2387: LD_VAR 0 3
2391: ARRAY
2392: EQUAL
2393: IFFALSE 2417
// SetAttitude ( i , j , att_friend , true ) else
2395: LD_VAR 0 2
2399: PPUSH
2400: LD_VAR 0 3
2404: PPUSH
2405: LD_INT 1
2407: PPUSH
2408: LD_INT 1
2410: PPUSH
2411: CALL_OW 80
2415: GO 2437
// SetAttitude ( i , j , att_enemy , true ) ;
2417: LD_VAR 0 2
2421: PPUSH
2422: LD_VAR 0 3
2426: PPUSH
2427: LD_INT 2
2429: PPUSH
2430: LD_INT 1
2432: PPUSH
2433: CALL_OW 80
2437: GO 2368
2439: POP
2440: POP
2441: GO 2352
2443: POP
2444: POP
// end ; end ;
2445: LD_VAR 0 1
2449: RET
// function prepare_people ( side , count , cl , x , y , r , var commander ) ; var j , i , un ; begin
2450: LD_INT 0
2452: PPUSH
2453: PPUSH
2454: PPUSH
2455: PPUSH
// result := [ ] ;
2456: LD_ADDR_VAR 0 8
2460: PUSH
2461: EMPTY
2462: ST_TO_ADDR
// for i := 1 to count do
2463: LD_ADDR_VAR 0 10
2467: PUSH
2468: DOUBLE
2469: LD_INT 1
2471: DEC
2472: ST_TO_ADDR
2473: LD_VAR 0 2
2477: PUSH
2478: FOR_TO
2479: IFFALSE 2873
// begin uc_direction := Rand ( 0 , 5 ) ;
2481: LD_ADDR_OWVAR 24
2485: PUSH
2486: LD_INT 0
2488: PPUSH
2489: LD_INT 5
2491: PPUSH
2492: CALL_OW 12
2496: ST_TO_ADDR
// if commander then
2497: LD_FROM_VAR 0 7
2501: IFFALSE 2610
// begin hc_name := mp_sides_players_names [ side ] ;
2503: LD_ADDR_OWVAR 26
2507: PUSH
2508: LD_OWVAR 19
2512: PUSH
2513: LD_VAR 0 1
2517: ARRAY
2518: ST_TO_ADDR
// PrepareHuman ( rand ( 1 , 2 ) , cl , skill_level + 2 ) ;
2519: LD_INT 1
2521: PPUSH
2522: LD_INT 2
2524: PPUSH
2525: CALL_OW 12
2529: PPUSH
2530: LD_VAR 0 3
2534: PPUSH
2535: LD_EXP 22
2539: PUSH
2540: LD_INT 2
2542: PLUS
2543: PPUSH
2544: CALL_OW 380
// hc_importance := 105 ;
2548: LD_ADDR_OWVAR 32
2552: PUSH
2553: LD_INT 105
2555: ST_TO_ADDR
// commander := false ;
2556: LD_VAR 0 7
2560: PUSH
2561: LD_INT 0
2563: ST_TO_ADDR
// if Multiplayer then
2564: LD_OWVAR 4
2568: IFFALSE 2608
// begin hc_gallery := MULTIAVATARS ;
2570: LD_ADDR_OWVAR 33
2574: PUSH
2575: LD_STRING MULTIAVATARS
2577: ST_TO_ADDR
// hc_face_number := Multiplayer_GetPlayerSideNum ( Side ) ;
2578: LD_ADDR_OWVAR 34
2582: PUSH
2583: LD_VAR 0 1
2587: PPUSH
2588: CALL_OW 525
2592: ST_TO_ADDR
// hc_sex := Multiplayer_GetPlayerSex ( Side ) ;
2593: LD_ADDR_OWVAR 27
2597: PUSH
2598: LD_VAR 0 1
2602: PPUSH
2603: CALL_OW 526
2607: ST_TO_ADDR
// end ; end else
2608: GO 2673
// begin hc_name :=  ;
2610: LD_ADDR_OWVAR 26
2614: PUSH
2615: LD_STRING 
2617: ST_TO_ADDR
// PrepareHuman ( rand ( 1 , 2 ) , cl , skill_level ) ;
2618: LD_INT 1
2620: PPUSH
2621: LD_INT 2
2623: PPUSH
2624: CALL_OW 12
2628: PPUSH
2629: LD_VAR 0 3
2633: PPUSH
2634: LD_EXP 22
2638: PPUSH
2639: CALL_OW 380
// hc_importance := 0 ;
2643: LD_ADDR_OWVAR 32
2647: PUSH
2648: LD_INT 0
2650: ST_TO_ADDR
// if Multiplayer then
2651: LD_OWVAR 4
2655: IFFALSE 2673
// begin hc_gallery :=  ;
2657: LD_ADDR_OWVAR 33
2661: PUSH
2662: LD_STRING 
2664: ST_TO_ADDR
// hc_face_number := 0 ;
2665: LD_ADDR_OWVAR 34
2669: PUSH
2670: LD_INT 0
2672: ST_TO_ADDR
// end ; end ; un := CreateHuman ;
2673: LD_ADDR_VAR 0 11
2677: PUSH
2678: CALL_OW 44
2682: ST_TO_ADDR
// if global_defined then
2683: LD_LOC 2
2687: IFFALSE 2825
// begin j := i ;
2689: LD_ADDR_VAR 0 9
2693: PUSH
2694: LD_VAR 0 10
2698: ST_TO_ADDR
// if cl = class_soldier then
2699: LD_VAR 0 3
2703: PUSH
2704: LD_INT 1
2706: EQUAL
2707: IFFALSE 2725
// j := i + soldiers_created ;
2709: LD_ADDR_VAR 0 9
2713: PUSH
2714: LD_VAR 0 10
2718: PUSH
2719: LD_LOC 3
2723: PLUS
2724: ST_TO_ADDR
// CopySkills ( global_units [ cl ] [ j ] , un ) ;
2725: LD_LOC 1
2729: PUSH
2730: LD_VAR 0 3
2734: ARRAY
2735: PUSH
2736: LD_VAR 0 9
2740: ARRAY
2741: PPUSH
2742: LD_VAR 0 11
2746: PPUSH
2747: CALL_OW 510
// SetAttr ( un , attr_speed , GetAttr ( global_units [ cl ] [ j ] , attr_speed ) ) ;
2751: LD_VAR 0 11
2755: PPUSH
2756: LD_INT 2
2758: PPUSH
2759: LD_LOC 1
2763: PUSH
2764: LD_VAR 0 3
2768: ARRAY
2769: PUSH
2770: LD_VAR 0 9
2774: ARRAY
2775: PPUSH
2776: LD_INT 2
2778: PPUSH
2779: CALL_OW 260
2783: PPUSH
2784: CALL_OW 239
// SetAttr ( un , attr_stamina , GetAttr ( global_units [ cl ] [ j ] , attr_stamina ) ) ;
2788: LD_VAR 0 11
2792: PPUSH
2793: LD_INT 1
2795: PPUSH
2796: LD_LOC 1
2800: PUSH
2801: LD_VAR 0 3
2805: ARRAY
2806: PUSH
2807: LD_VAR 0 9
2811: ARRAY
2812: PPUSH
2813: LD_INT 1
2815: PPUSH
2816: CALL_OW 260
2820: PPUSH
2821: CALL_OW 239
// end ; PlaceUnitXYR ( un , x , y , r , false ) ;
2825: LD_VAR 0 11
2829: PPUSH
2830: LD_VAR 0 4
2834: PPUSH
2835: LD_VAR 0 5
2839: PPUSH
2840: LD_VAR 0 6
2844: PPUSH
2845: LD_INT 0
2847: PPUSH
2848: CALL_OW 50
// result := result ^ [ un ] ;
2852: LD_ADDR_VAR 0 8
2856: PUSH
2857: LD_VAR 0 8
2861: PUSH
2862: LD_VAR 0 11
2866: PUSH
2867: EMPTY
2868: LIST
2869: ADD
2870: ST_TO_ADDR
// end ;
2871: GO 2478
2873: POP
2874: POP
// if not global_defined then
2875: LD_LOC 2
2879: NOT
2880: IFFALSE 2942
// if cl = class_soldier and global_units then
2882: LD_VAR 0 3
2886: PUSH
2887: LD_INT 1
2889: EQUAL
2890: PUSH
2891: LD_LOC 1
2895: AND
2896: IFFALSE 2923
// global_units := [ global_units [ 1 ] ^ result ] else
2898: LD_ADDR_LOC 1
2902: PUSH
2903: LD_LOC 1
2907: PUSH
2908: LD_INT 1
2910: ARRAY
2911: PUSH
2912: LD_VAR 0 8
2916: ADD
2917: PUSH
2918: EMPTY
2919: LIST
2920: ST_TO_ADDR
2921: GO 2942
// global_units := global_units ^ [ result ] end ;
2923: LD_ADDR_LOC 1
2927: PUSH
2928: LD_LOC 1
2932: PUSH
2933: LD_VAR 0 8
2937: PUSH
2938: EMPTY
2939: LIST
2940: ADD
2941: ST_TO_ADDR
2942: LD_VAR 0 8
2946: RET
// function prepare_side ( side ) ; var pos , x , y , dir , i , r , sol , br , dep , neng , nsci , nmech , nsol ; begin
2947: LD_INT 0
2949: PPUSH
2950: PPUSH
2951: PPUSH
2952: PPUSH
2953: PPUSH
2954: PPUSH
2955: PPUSH
2956: PPUSH
2957: PPUSH
2958: PPUSH
2959: PPUSH
2960: PPUSH
2961: PPUSH
2962: PPUSH
// Side_IsSpec := Replace ( Side_IsSpec , Side , Multiplayer_GetPlayerIsSpec ( Side ) ) ;
2963: LD_ADDR_EXP 45
2967: PUSH
2968: LD_EXP 45
2972: PPUSH
2973: LD_VAR 0 1
2977: PPUSH
2978: LD_VAR 0 1
2982: PPUSH
2983: CALL_OW 530
2987: PPUSH
2988: CALL_OW 1
2992: ST_TO_ADDR
// if Side_IsSpec [ Side ] = true then
2993: LD_EXP 45
2997: PUSH
2998: LD_VAR 0 1
3002: ARRAY
3003: PUSH
3004: LD_INT 1
3006: EQUAL
3007: IFFALSE 3011
// begin exit ;
3009: GO 4092
// end ; pos := Side_Positions [ side ] ;
3011: LD_ADDR_VAR 0 3
3015: PUSH
3016: LD_EXP 46
3020: PUSH
3021: LD_VAR 0 1
3025: ARRAY
3026: ST_TO_ADDR
// if not def_siberite_bomb then
3027: LD_EXP 16
3031: NOT
3032: IFFALSE 3069
// for i = 1 to 8 do
3034: LD_ADDR_VAR 0 7
3038: PUSH
3039: DOUBLE
3040: LD_INT 1
3042: DEC
3043: ST_TO_ADDR
3044: LD_INT 8
3046: PUSH
3047: FOR_TO
3048: IFFALSE 3067
// SetTech ( tech_SibFiss , i , state_disabled ) ;
3050: LD_INT 25
3052: PPUSH
3053: LD_VAR 0 7
3057: PPUSH
3058: LD_INT 0
3060: PPUSH
3061: CALL_OW 322
3065: GO 3047
3067: POP
3068: POP
// uc_nation := Side_Nations [ side ] ;
3069: LD_ADDR_OWVAR 21
3073: PUSH
3074: LD_EXP 47
3078: PUSH
3079: LD_VAR 0 1
3083: ARRAY
3084: ST_TO_ADDR
// uc_side := side ;
3085: LD_ADDR_OWVAR 20
3089: PUSH
3090: LD_VAR 0 1
3094: ST_TO_ADDR
// x := depot_def [ pos ] [ 1 ] ;
3095: LD_ADDR_VAR 0 4
3099: PUSH
3100: LD_EXP 51
3104: PUSH
3105: LD_VAR 0 3
3109: ARRAY
3110: PUSH
3111: LD_INT 1
3113: ARRAY
3114: ST_TO_ADDR
// y := depot_def [ pos ] [ 2 ] ;
3115: LD_ADDR_VAR 0 5
3119: PUSH
3120: LD_EXP 51
3124: PUSH
3125: LD_VAR 0 3
3129: ARRAY
3130: PUSH
3131: LD_INT 2
3133: ARRAY
3134: ST_TO_ADDR
// dir := depot_def [ pos ] [ 3 ] ;
3135: LD_ADDR_VAR 0 6
3139: PUSH
3140: LD_EXP 51
3144: PUSH
3145: LD_VAR 0 3
3149: ARRAY
3150: PUSH
3151: LD_INT 3
3153: ARRAY
3154: ST_TO_ADDR
// if is_depot then
3155: LD_EXP 19
3159: IFFALSE 3284
// begin bc_type = b_depot ;
3161: LD_ADDR_OWVAR 42
3165: PUSH
3166: LD_INT 0
3168: ST_TO_ADDR
// dep := CreateAndPlaceBuildingXYD ( x , y , Depot_Def [ pos ] [ 3 ] ) ;
3169: LD_ADDR_VAR 0 11
3173: PUSH
3174: LD_VAR 0 4
3178: PPUSH
3179: LD_VAR 0 5
3183: PPUSH
3184: LD_EXP 51
3188: PUSH
3189: LD_VAR 0 3
3193: ARRAY
3194: PUSH
3195: LD_INT 3
3197: ARRAY
3198: PPUSH
3199: CALL_OW 47
3203: ST_TO_ADDR
// SetResourceType ( GetBase ( dep ) , mat_cans , starting_resources [ mat_cans ] ) ;
3204: LD_VAR 0 11
3208: PPUSH
3209: CALL_OW 274
3213: PPUSH
3214: LD_INT 1
3216: PPUSH
3217: LD_EXP 24
3221: PUSH
3222: LD_INT 1
3224: ARRAY
3225: PPUSH
3226: CALL_OW 277
// SetResourceType ( GetBase ( dep ) , mat_oil , starting_resources [ mat_oil ] ) ;
3230: LD_VAR 0 11
3234: PPUSH
3235: CALL_OW 274
3239: PPUSH
3240: LD_INT 2
3242: PPUSH
3243: LD_EXP 24
3247: PUSH
3248: LD_INT 2
3250: ARRAY
3251: PPUSH
3252: CALL_OW 277
// SetResourceType ( GetBase ( result ) , mat_siberit , starting_resources [ mat_siberit ] ) ;
3256: LD_VAR 0 2
3260: PPUSH
3261: CALL_OW 274
3265: PPUSH
3266: LD_INT 3
3268: PPUSH
3269: LD_EXP 24
3273: PUSH
3274: LD_INT 3
3276: ARRAY
3277: PPUSH
3278: CALL_OW 277
// end else
3282: GO 3428
// begin for i := 1 to 3 do
3284: LD_ADDR_VAR 0 7
3288: PUSH
3289: DOUBLE
3290: LD_INT 1
3292: DEC
3293: ST_TO_ADDR
3294: LD_INT 3
3296: PUSH
3297: FOR_TO
3298: IFFALSE 3426
// begin r := starting_resources [ i ] ;
3300: LD_ADDR_VAR 0 8
3304: PUSH
3305: LD_EXP 24
3309: PUSH
3310: LD_VAR 0 7
3314: ARRAY
3315: ST_TO_ADDR
// while r >= 10 do
3316: LD_VAR 0 8
3320: PUSH
3321: LD_INT 10
3323: GREATEREQUAL
3324: IFFALSE 3424
// if r > 50 then
3326: LD_VAR 0 8
3330: PUSH
3331: LD_INT 50
3333: GREATER
3334: IFFALSE 3380
// begin CreateResourcesXYR ( i , 5 , x , y , 4 , false ) ;
3336: LD_VAR 0 7
3340: PPUSH
3341: LD_INT 5
3343: PPUSH
3344: LD_VAR 0 4
3348: PPUSH
3349: LD_VAR 0 5
3353: PPUSH
3354: LD_INT 4
3356: PPUSH
3357: LD_INT 0
3359: PPUSH
3360: CALL_OW 60
// r := r - 50 ;
3364: LD_ADDR_VAR 0 8
3368: PUSH
3369: LD_VAR 0 8
3373: PUSH
3374: LD_INT 50
3376: MINUS
3377: ST_TO_ADDR
// end else
3378: GO 3422
// begin CreateResourcesXYR ( i , r div 10 , x , y , 4 , false ) ;
3380: LD_VAR 0 7
3384: PPUSH
3385: LD_VAR 0 8
3389: PUSH
3390: LD_INT 10
3392: DIV
3393: PPUSH
3394: LD_VAR 0 4
3398: PPUSH
3399: LD_VAR 0 5
3403: PPUSH
3404: LD_INT 4
3406: PPUSH
3407: LD_INT 0
3409: PPUSH
3410: CALL_OW 60
// r := 0 ;
3414: LD_ADDR_VAR 0 8
3418: PUSH
3419: LD_INT 0
3421: ST_TO_ADDR
// end ;
3422: GO 3316
// end ;
3424: GO 3297
3426: POP
3427: POP
// end ; for r in starting_crates do
3428: LD_ADDR_VAR 0 8
3432: PUSH
3433: LD_EXP 23
3437: PUSH
3438: FOR_IN
3439: IFFALSE 3471
// CreateResourcesXYR ( mat_cans , 5 , x , y , r , false ) ;
3441: LD_INT 1
3443: PPUSH
3444: LD_INT 5
3446: PPUSH
3447: LD_VAR 0 4
3451: PPUSH
3452: LD_VAR 0 5
3456: PPUSH
3457: LD_VAR 0 8
3461: PPUSH
3462: LD_INT 0
3464: PPUSH
3465: CALL_OW 60
3469: GO 3438
3471: POP
3472: POP
// if def_morale_flags then
3473: LD_EXP 10
3477: IFFALSE 3628
// begin PlaceEnvironment ( ShiftX ( x , dir , 10 ) , ShiftY ( y , dir , 10 ) , 12 , 2 ) ;
3479: LD_VAR 0 4
3483: PPUSH
3484: LD_VAR 0 6
3488: PPUSH
3489: LD_INT 10
3491: PPUSH
3492: CALL_OW 272
3496: PPUSH
3497: LD_VAR 0 5
3501: PPUSH
3502: LD_VAR 0 6
3506: PPUSH
3507: LD_INT 10
3509: PPUSH
3510: CALL_OW 273
3514: PPUSH
3515: LD_INT 12
3517: PPUSH
3518: LD_INT 2
3520: PPUSH
3521: CALL_OW 349
// battle_flags_id := battle_flags_id ^ SetBattleFlag ( side , ShiftX ( x , dir , 10 ) , ShiftY ( y , dir , 10 ) , [ [ bfo_defend_bonus_human , 100 ] , [ bfo_defend_bonus_vehicle , 50 ] , [ bfo_defend_bonus_building , 20 ] , [ bfo_height , 100 ] ] ) ;
3525: LD_ADDR_EXP 31
3529: PUSH
3530: LD_EXP 31
3534: PUSH
3535: LD_VAR 0 1
3539: PPUSH
3540: LD_VAR 0 4
3544: PPUSH
3545: LD_VAR 0 6
3549: PPUSH
3550: LD_INT 10
3552: PPUSH
3553: CALL_OW 272
3557: PPUSH
3558: LD_VAR 0 5
3562: PPUSH
3563: LD_VAR 0 6
3567: PPUSH
3568: LD_INT 10
3570: PPUSH
3571: CALL_OW 273
3575: PPUSH
3576: LD_INT 1
3578: PUSH
3579: LD_INT 100
3581: PUSH
3582: EMPTY
3583: LIST
3584: LIST
3585: PUSH
3586: LD_INT 2
3588: PUSH
3589: LD_INT 50
3591: PUSH
3592: EMPTY
3593: LIST
3594: LIST
3595: PUSH
3596: LD_INT 3
3598: PUSH
3599: LD_INT 20
3601: PUSH
3602: EMPTY
3603: LIST
3604: LIST
3605: PUSH
3606: LD_INT 20
3608: PUSH
3609: LD_INT 100
3611: PUSH
3612: EMPTY
3613: LIST
3614: LIST
3615: PUSH
3616: EMPTY
3617: LIST
3618: LIST
3619: LIST
3620: LIST
3621: PPUSH
3622: CALL_OW 418
3626: ADD
3627: ST_TO_ADDR
// end ; neng := number_of_people ;
3628: LD_ADDR_VAR 0 12
3632: PUSH
3633: LD_EXP 21
3637: ST_TO_ADDR
// nsol := number_of_breastworks ;
3638: LD_ADDR_VAR 0 15
3642: PUSH
3643: LD_EXP 20
3647: ST_TO_ADDR
// if nsol < neng div 4 then
3648: LD_VAR 0 15
3652: PUSH
3653: LD_VAR 0 12
3657: PUSH
3658: LD_INT 4
3660: DIV
3661: LESS
3662: IFFALSE 3678
// nsol := neng div 4 ;
3664: LD_ADDR_VAR 0 15
3668: PUSH
3669: LD_VAR 0 12
3673: PUSH
3674: LD_INT 4
3676: DIV
3677: ST_TO_ADDR
// neng := neng - nsol ;
3678: LD_ADDR_VAR 0 12
3682: PUSH
3683: LD_VAR 0 12
3687: PUSH
3688: LD_VAR 0 15
3692: MINUS
3693: ST_TO_ADDR
// nsci := neng div 3 ;
3694: LD_ADDR_VAR 0 13
3698: PUSH
3699: LD_VAR 0 12
3703: PUSH
3704: LD_INT 3
3706: DIV
3707: ST_TO_ADDR
// if nsci < 1 then
3708: LD_VAR 0 13
3712: PUSH
3713: LD_INT 1
3715: LESS
3716: IFFALSE 3726
// nsci := 1 ;
3718: LD_ADDR_VAR 0 13
3722: PUSH
3723: LD_INT 1
3725: ST_TO_ADDR
// neng := neng - nsci ;
3726: LD_ADDR_VAR 0 12
3730: PUSH
3731: LD_VAR 0 12
3735: PUSH
3736: LD_VAR 0 13
3740: MINUS
3741: ST_TO_ADDR
// nmech := neng div 2 ;
3742: LD_ADDR_VAR 0 14
3746: PUSH
3747: LD_VAR 0 12
3751: PUSH
3752: LD_INT 2
3754: DIV
3755: ST_TO_ADDR
// neng := neng - nmech ;
3756: LD_ADDR_VAR 0 12
3760: PUSH
3761: LD_VAR 0 12
3765: PUSH
3766: LD_VAR 0 14
3770: MINUS
3771: ST_TO_ADDR
// if neng < 1 then
3772: LD_VAR 0 12
3776: PUSH
3777: LD_INT 1
3779: LESS
3780: IFFALSE 3790
// neng := 1 ;
3782: LD_ADDR_VAR 0 12
3786: PUSH
3787: LD_INT 1
3789: ST_TO_ADDR
// commander := true ;
3790: LD_ADDR_EXP 58
3794: PUSH
3795: LD_INT 1
3797: ST_TO_ADDR
// soldiers_created := 0 ;
3798: LD_ADDR_LOC 3
3802: PUSH
3803: LD_INT 0
3805: ST_TO_ADDR
// for i := 1 to number_of_breastworks do
3806: LD_ADDR_VAR 0 7
3810: PUSH
3811: DOUBLE
3812: LD_INT 1
3814: DEC
3815: ST_TO_ADDR
3816: LD_EXP 20
3820: PUSH
3821: FOR_TO
3822: IFFALSE 3883
// begin sol := prepare_people ( side , 1 , class_soldier , x , y , 1 , commander ) [ 1 ] ;
3824: LD_ADDR_VAR 0 9
3828: PUSH
3829: LD_VAR 0 1
3833: PPUSH
3834: LD_INT 1
3836: PPUSH
3837: LD_INT 1
3839: PPUSH
3840: LD_VAR 0 4
3844: PPUSH
3845: LD_VAR 0 5
3849: PPUSH
3850: LD_INT 1
3852: PPUSH
3853: LD_ADDR_EXP 58
3857: PPUSH
3858: CALL 2450 0 7
3862: PUSH
3863: LD_INT 1
3865: ARRAY
3866: ST_TO_ADDR
// soldiers_created := soldiers_created + 1 ;
3867: LD_ADDR_LOC 3
3871: PUSH
3872: LD_LOC 3
3876: PUSH
3877: LD_INT 1
3879: PLUS
3880: ST_TO_ADDR
// end ;
3881: GO 3821
3883: POP
3884: POP
// x := start_def [ pos ] [ 1 ] ;
3885: LD_ADDR_VAR 0 4
3889: PUSH
3890: LD_EXP 52
3894: PUSH
3895: LD_VAR 0 3
3899: ARRAY
3900: PUSH
3901: LD_INT 1
3903: ARRAY
3904: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
3905: LD_ADDR_VAR 0 5
3909: PUSH
3910: LD_EXP 52
3914: PUSH
3915: LD_VAR 0 3
3919: ARRAY
3920: PUSH
3921: LD_INT 2
3923: ARRAY
3924: ST_TO_ADDR
// prepare_people ( side , nsol - number_of_breastworks , class_soldier , x , y , 5 , commander ) ;
3925: LD_VAR 0 1
3929: PPUSH
3930: LD_VAR 0 15
3934: PUSH
3935: LD_EXP 20
3939: MINUS
3940: PPUSH
3941: LD_INT 1
3943: PPUSH
3944: LD_VAR 0 4
3948: PPUSH
3949: LD_VAR 0 5
3953: PPUSH
3954: LD_INT 5
3956: PPUSH
3957: LD_ADDR_EXP 58
3961: PPUSH
3962: CALL 2450 0 7
// prepare_people ( side , neng , class_engineer , x , y , 5 , commander ) ;
3966: LD_VAR 0 1
3970: PPUSH
3971: LD_VAR 0 12
3975: PPUSH
3976: LD_INT 2
3978: PPUSH
3979: LD_VAR 0 4
3983: PPUSH
3984: LD_VAR 0 5
3988: PPUSH
3989: LD_INT 5
3991: PPUSH
3992: LD_ADDR_EXP 58
3996: PPUSH
3997: CALL 2450 0 7
// prepare_people ( side , nmech , class_mechanic , x , y , 5 , commander ) ;
4001: LD_VAR 0 1
4005: PPUSH
4006: LD_VAR 0 14
4010: PPUSH
4011: LD_INT 3
4013: PPUSH
4014: LD_VAR 0 4
4018: PPUSH
4019: LD_VAR 0 5
4023: PPUSH
4024: LD_INT 5
4026: PPUSH
4027: LD_ADDR_EXP 58
4031: PPUSH
4032: CALL 2450 0 7
// prepare_people ( side , nsci , class_scientistic , x , y , 5 , commander ) ;
4036: LD_VAR 0 1
4040: PPUSH
4041: LD_VAR 0 13
4045: PPUSH
4046: LD_INT 4
4048: PPUSH
4049: LD_VAR 0 4
4053: PPUSH
4054: LD_VAR 0 5
4058: PPUSH
4059: LD_INT 5
4061: PPUSH
4062: LD_ADDR_EXP 58
4066: PPUSH
4067: CALL 2450 0 7
// if def_siberite_detection then
4071: LD_EXP 11
4075: IFFALSE 4092
// SetTech ( tech_SibDet , side , state_researched ) ;
4077: LD_INT 20
4079: PPUSH
4080: LD_VAR 0 1
4084: PPUSH
4085: LD_INT 2
4087: PPUSH
4088: CALL_OW 322
// end ;
4092: LD_VAR 0 2
4096: RET
// function prepare_sides ; var i ; begin
4097: LD_INT 0
4099: PPUSH
4100: PPUSH
// global_units := [ ] ;
4101: LD_ADDR_LOC 1
4105: PUSH
4106: EMPTY
4107: ST_TO_ADDR
// global_defined := false ;
4108: LD_ADDR_LOC 2
4112: PUSH
4113: LD_INT 0
4115: ST_TO_ADDR
// for i := 1 to 8 do
4116: LD_ADDR_VAR 0 2
4120: PUSH
4121: DOUBLE
4122: LD_INT 1
4124: DEC
4125: ST_TO_ADDR
4126: LD_INT 8
4128: PUSH
4129: FOR_TO
4130: IFFALSE 4155
// if Side_Positions [ i ] then
4132: LD_EXP 46
4136: PUSH
4137: LD_VAR 0 2
4141: ARRAY
4142: IFFALSE 4153
// prepare_side ( i ) ;
4144: LD_VAR 0 2
4148: PPUSH
4149: CALL 2947 0 1
4153: GO 4129
4155: POP
4156: POP
// end ;
4157: LD_VAR 0 1
4161: RET
// function prepare_specfog ; var i , x ; begin
4162: LD_INT 0
4164: PPUSH
4165: PPUSH
4166: PPUSH
// if IAmSpec then
4167: CALL_OW 531
4171: IFFALSE 4177
// TurnFogOff ;
4173: CALL_OW 537
// end ;
4177: LD_VAR 0 1
4181: RET
// starting begin FogOff ( false ) ;
4182: LD_INT 0
4184: PPUSH
4185: CALL_OW 344
// disable ( 98 ) ;
4189: LD_INT 98
4191: DISABLE_MARKED
// disable ( 99 ) ;
4192: LD_INT 99
4194: DISABLE_MARKED
// disable ( 100 ) ;
4195: LD_INT 100
4197: DISABLE_MARKED
// mp_selectmsg := true ;
4198: LD_ADDR_OWVAR 13
4202: PUSH
4203: LD_INT 1
4205: ST_TO_ADDR
// InitBloodGods ;
4206: CALL 8682 0 0
// read_multiplayer_and_game_parameters ;
4210: CALL 0 0 0
// init_respawning ;
4214: CALL 5310 0 0
// set_shared_visions_and_alliances ;
4218: CALL 2087 0 0
// prepare_sides ;
4222: CALL 4097 0 0
// init_map ;
4226: CALL 1747 0 0
// init_win_condition ;
4230: CALL 6183 0 0
// your_side := Player_Side ;
4234: LD_ADDR_OWVAR 2
4238: PUSH
4239: LD_EXP 41
4243: ST_TO_ADDR
// ResetFog ;
4244: CALL_OW 335
// prepare_specfog ;
4248: CALL 4162 0 0
// music_nat := Side_Nations [ your_side ] ;
4252: LD_ADDR_OWVAR 71
4256: PUSH
4257: LD_EXP 47
4261: PUSH
4262: LD_OWVAR 2
4266: ARRAY
4267: ST_TO_ADDR
// if IAMSpec then
4268: CALL_OW 531
4272: IFFALSE 4286
// CenterNowOnXY ( 104 , 69 ) else
4274: LD_INT 104
4276: PPUSH
4277: LD_INT 69
4279: PPUSH
4280: CALL_OW 86
4284: GO 4332
// CenterNowOnXY ( start_def [ Side_Positions [ your_side ] ] [ 1 ] , start_def [ Side_Positions [ your_side ] ] [ 2 ] ) ;
4286: LD_EXP 52
4290: PUSH
4291: LD_EXP 46
4295: PUSH
4296: LD_OWVAR 2
4300: ARRAY
4301: ARRAY
4302: PUSH
4303: LD_INT 1
4305: ARRAY
4306: PPUSH
4307: LD_EXP 52
4311: PUSH
4312: LD_EXP 46
4316: PUSH
4317: LD_OWVAR 2
4321: ARRAY
4322: ARRAY
4323: PUSH
4324: LD_INT 2
4326: ARRAY
4327: PPUSH
4328: CALL_OW 86
// Anticheatcheck ;
4332: CALL_OW 514
// end ; end_of_file
4336: END
// every 1 1$0 + 0 0$1 do
4337: GO 4339
4339: DISABLE
// begin CreateCratesAnywhere ( Rand ( 4 , 5 ) , true ) ;
4340: LD_INT 4
4342: PPUSH
4343: LD_INT 5
4345: PPUSH
4346: CALL_OW 12
4350: PPUSH
4351: LD_INT 1
4353: PPUSH
4354: CALL_OW 57
// enable ;
4358: ENABLE
// end ;
4359: END
// every 0 0$1 + 0 0$1 do var i ;
4360: GO 4362
4362: DISABLE
4363: LD_INT 0
4365: PPUSH
// begin case tick of 1 .. 1 1$0 :
4366: LD_OWVAR 1
4370: PUSH
4371: LD_INT 1
4373: DOUBLE
4374: GREATEREQUAL
4375: IFFALSE 4383
4377: LD_INT 2100
4379: DOUBLE
4380: LESSEQUAL
4381: IFTRUE 4385
4383: GO 4413
4385: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$10 , 0 0$30 ) ) ; 1 1$0 + 1 .. 5 5$0 :
4386: LD_EXP 25
4390: PUSH
4391: LD_INT 100
4393: DIVREAL
4394: PUSH
4395: LD_INT 350
4397: PPUSH
4398: LD_INT 1050
4400: PPUSH
4401: CALL_OW 12
4405: MUL
4406: PPUSH
4407: CALL_OW 67
4411: GO 4715
4413: LD_INT 2100
4415: PUSH
4416: LD_INT 1
4418: PLUS
4419: DOUBLE
4420: GREATEREQUAL
4421: IFFALSE 4429
4423: LD_INT 10500
4425: DOUBLE
4426: LESSEQUAL
4427: IFTRUE 4431
4429: GO 4459
4431: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$30 , 0 0$45 ) ) ; 5 5$0 + 1 .. 10 10$0 :
4432: LD_EXP 25
4436: PUSH
4437: LD_INT 100
4439: DIVREAL
4440: PUSH
4441: LD_INT 1050
4443: PPUSH
4444: LD_INT 1575
4446: PPUSH
4447: CALL_OW 12
4451: MUL
4452: PPUSH
4453: CALL_OW 67
4457: GO 4715
4459: LD_INT 10500
4461: PUSH
4462: LD_INT 1
4464: PLUS
4465: DOUBLE
4466: GREATEREQUAL
4467: IFFALSE 4475
4469: LD_INT 21000
4471: DOUBLE
4472: LESSEQUAL
4473: IFTRUE 4477
4475: GO 4505
4477: POP
// Wait ( shipments_density / 100 * Rand ( 0 0$45 , 1 1$0 ) ) ; 10 10$0 + 1 .. 20 20$0 :
4478: LD_EXP 25
4482: PUSH
4483: LD_INT 100
4485: DIVREAL
4486: PUSH
4487: LD_INT 1575
4489: PPUSH
4490: LD_INT 2100
4492: PPUSH
4493: CALL_OW 12
4497: MUL
4498: PPUSH
4499: CALL_OW 67
4503: GO 4715
4505: LD_INT 21000
4507: PUSH
4508: LD_INT 1
4510: PLUS
4511: DOUBLE
4512: GREATEREQUAL
4513: IFFALSE 4521
4515: LD_INT 42000
4517: DOUBLE
4518: LESSEQUAL
4519: IFTRUE 4523
4521: GO 4551
4523: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$0 , 1 1$15 ) ) ; 20 20$0 + 1 .. 30 30$0 :
4524: LD_EXP 25
4528: PUSH
4529: LD_INT 100
4531: DIVREAL
4532: PUSH
4533: LD_INT 2100
4535: PPUSH
4536: LD_INT 2625
4538: PPUSH
4539: CALL_OW 12
4543: MUL
4544: PPUSH
4545: CALL_OW 67
4549: GO 4715
4551: LD_INT 42000
4553: PUSH
4554: LD_INT 1
4556: PLUS
4557: DOUBLE
4558: GREATEREQUAL
4559: IFFALSE 4567
4561: LD_INT 63000
4563: DOUBLE
4564: LESSEQUAL
4565: IFTRUE 4569
4567: GO 4597
4569: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$15 , 1 1$30 ) ) ; 30 30$0 + 1 .. 50 50$0 :
4570: LD_EXP 25
4574: PUSH
4575: LD_INT 100
4577: DIVREAL
4578: PUSH
4579: LD_INT 2625
4581: PPUSH
4582: LD_INT 3150
4584: PPUSH
4585: CALL_OW 12
4589: MUL
4590: PPUSH
4591: CALL_OW 67
4595: GO 4715
4597: LD_INT 63000
4599: PUSH
4600: LD_INT 1
4602: PLUS
4603: DOUBLE
4604: GREATEREQUAL
4605: IFFALSE 4613
4607: LD_INT 105000
4609: DOUBLE
4610: LESSEQUAL
4611: IFTRUE 4615
4613: GO 4643
4615: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$30 , 1 1$45 ) ) ; 50 50$0 + 1 .. 300 300$0 :
4616: LD_EXP 25
4620: PUSH
4621: LD_INT 100
4623: DIVREAL
4624: PUSH
4625: LD_INT 3150
4627: PPUSH
4628: LD_INT 3675
4630: PPUSH
4631: CALL_OW 12
4635: MUL
4636: PPUSH
4637: CALL_OW 67
4641: GO 4715
4643: LD_INT 105000
4645: PUSH
4646: LD_INT 1
4648: PLUS
4649: DOUBLE
4650: GREATEREQUAL
4651: IFFALSE 4659
4653: LD_INT 630000
4655: DOUBLE
4656: LESSEQUAL
4657: IFTRUE 4661
4659: GO 4689
4661: POP
// Wait ( shipments_density / 100 * Rand ( 1 1$45 , 2 2$0 ) ) ; else
4662: LD_EXP 25
4666: PUSH
4667: LD_INT 100
4669: DIVREAL
4670: PUSH
4671: LD_INT 3675
4673: PPUSH
4674: LD_INT 4200
4676: PPUSH
4677: CALL_OW 12
4681: MUL
4682: PPUSH
4683: CALL_OW 67
4687: GO 4715
4689: POP
// Wait ( shipments_density / 100 * Rand ( 2 2$0 , 2 2$30 ) ) ; end ;
4690: LD_EXP 25
4694: PUSH
4695: LD_INT 100
4697: DIVREAL
4698: PUSH
4699: LD_INT 4200
4701: PPUSH
4702: LD_INT 5250
4704: PPUSH
4705: CALL_OW 12
4709: MUL
4710: PPUSH
4711: CALL_OW 67
// for i := 1 to 8 do
4715: LD_ADDR_VAR 0 1
4719: PUSH
4720: DOUBLE
4721: LD_INT 1
4723: DEC
4724: ST_TO_ADDR
4725: LD_INT 8
4727: PUSH
4728: FOR_TO
4729: IFFALSE 4832
// if Side_Positions [ i ] <> 0 then
4731: LD_EXP 46
4735: PUSH
4736: LD_VAR 0 1
4740: ARRAY
4741: PUSH
4742: LD_INT 0
4744: NONEQUAL
4745: IFFALSE 4830
// if not Side_IsSpec [ i ] then
4747: LD_EXP 45
4751: PUSH
4752: LD_VAR 0 1
4756: ARRAY
4757: NOT
4758: IFFALSE 4830
// begin CreateCratesXYR ( Rand ( 3 , 5 ) , start_def [ Side_Positions [ i ] ] [ 1 ] , start_def [ Side_Positions [ i ] ] [ 2 ] , 20 , true ) ;
4760: LD_INT 3
4762: PPUSH
4763: LD_INT 5
4765: PPUSH
4766: CALL_OW 12
4770: PPUSH
4771: LD_EXP 52
4775: PUSH
4776: LD_EXP 46
4780: PUSH
4781: LD_VAR 0 1
4785: ARRAY
4786: ARRAY
4787: PUSH
4788: LD_INT 1
4790: ARRAY
4791: PPUSH
4792: LD_EXP 52
4796: PUSH
4797: LD_EXP 46
4801: PUSH
4802: LD_VAR 0 1
4806: ARRAY
4807: ARRAY
4808: PUSH
4809: LD_INT 2
4811: ARRAY
4812: PPUSH
4813: LD_INT 20
4815: PPUSH
4816: LD_INT 1
4818: PPUSH
4819: CALL_OW 56
// Wait ( 2 ) ;
4823: LD_INT 2
4825: PPUSH
4826: CALL_OW 67
// end ;
4830: GO 4728
4832: POP
4833: POP
// enable ;
4834: ENABLE
// end ;
4835: PPOPN 1
4837: END
// every 0 0$20 + 0 0$1 do var i , filter ;
4838: GO 4840
4840: DISABLE
4841: LD_INT 0
4843: PPUSH
4844: PPUSH
// begin if GetResourceArea ( Srodek , mat_cans ) < ( ( 200 - shipments_density ) / 100 * 5 ) then
4845: LD_INT 7
4847: PPUSH
4848: LD_INT 1
4850: PPUSH
4851: CALL_OW 287
4855: PUSH
4856: LD_INT 200
4858: PUSH
4859: LD_EXP 25
4863: MINUS
4864: PUSH
4865: LD_INT 100
4867: DIVREAL
4868: PUSH
4869: LD_INT 5
4871: MUL
4872: LESS
4873: IFFALSE 4896
// CreateCratesArea ( Rand ( 3 , 5 ) , Srodek , true ) ;
4875: LD_INT 3
4877: PPUSH
4878: LD_INT 5
4880: PPUSH
4881: CALL_OW 12
4885: PPUSH
4886: LD_INT 7
4888: PPUSH
4889: LD_INT 1
4891: PPUSH
4892: CALL_OW 55
// enable ;
4896: ENABLE
// end ; end_of_file
4897: PPOPN 2
4899: END
// function apeman_init ; begin
4900: LD_INT 0
4902: PPUSH
// uc_side := 0 ;
4903: LD_ADDR_OWVAR 20
4907: PUSH
4908: LD_INT 0
4910: ST_TO_ADDR
// uc_nation := nation_nature ;
4911: LD_ADDR_OWVAR 21
4915: PUSH
4916: LD_INT 0
4918: ST_TO_ADDR
// hc_class := class_apeman ;
4919: LD_ADDR_OWVAR 28
4923: PUSH
4924: LD_INT 12
4926: ST_TO_ADDR
// hc_basic_skills := [ 1 , 1 , 1 , 1 ] ;
4927: LD_ADDR_OWVAR 30
4931: PUSH
4932: LD_INT 1
4934: PUSH
4935: LD_INT 1
4937: PUSH
4938: LD_INT 1
4940: PUSH
4941: LD_INT 1
4943: PUSH
4944: EMPTY
4945: LIST
4946: LIST
4947: LIST
4948: LIST
4949: ST_TO_ADDR
// hc_skills := [ 1 , 1 , 1 , 1 ] ;
4950: LD_ADDR_OWVAR 31
4954: PUSH
4955: LD_INT 1
4957: PUSH
4958: LD_INT 1
4960: PUSH
4961: LD_INT 1
4963: PUSH
4964: LD_INT 1
4966: PUSH
4967: EMPTY
4968: LIST
4969: LIST
4970: LIST
4971: LIST
4972: ST_TO_ADDR
// hc_attr := [ 10 , 12 ] ;
4973: LD_ADDR_OWVAR 29
4977: PUSH
4978: LD_INT 10
4980: PUSH
4981: LD_INT 12
4983: PUSH
4984: EMPTY
4985: LIST
4986: LIST
4987: ST_TO_ADDR
// hc_sex := sex_male ;
4988: LD_ADDR_OWVAR 27
4992: PUSH
4993: LD_INT 1
4995: ST_TO_ADDR
// hc_importance := 0 ;
4996: LD_ADDR_OWVAR 32
5000: PUSH
5001: LD_INT 0
5003: ST_TO_ADDR
// hc_agressivity := Rand ( - 20 , 20 ) ;
5004: LD_ADDR_OWVAR 35
5008: PUSH
5009: LD_INT 20
5011: NEG
5012: PPUSH
5013: LD_INT 20
5015: PPUSH
5016: CALL_OW 12
5020: ST_TO_ADDR
// end ;
5021: LD_VAR 0 1
5025: RET
// function prepare_apemen ; var i , j , un , ape , first , d1 , d2 ; begin
5026: LD_INT 0
5028: PPUSH
5029: PPUSH
5030: PPUSH
5031: PPUSH
5032: PPUSH
5033: PPUSH
5034: PPUSH
5035: PPUSH
// if not amount_of_apemen then
5036: LD_EXP 26
5040: NOT
5041: IFFALSE 5045
// exit ;
5043: GO 5297
// ape := 0 ;
5045: LD_ADDR_VAR 0 5
5049: PUSH
5050: LD_INT 0
5052: ST_TO_ADDR
// repeat Wait ( ( ape + 1 ) * Rand ( 0 0$10 , 1 1$0 ) ) ;
5053: LD_VAR 0 5
5057: PUSH
5058: LD_INT 1
5060: PLUS
5061: PUSH
5062: LD_INT 350
5064: PPUSH
5065: LD_INT 2100
5067: PPUSH
5068: CALL_OW 12
5072: MUL
5073: PPUSH
5074: CALL_OW 67
// apeman_init ;
5078: CALL 4900 0 0
// for i := 1 to 6 do
5082: LD_ADDR_VAR 0 2
5086: PUSH
5087: DOUBLE
5088: LD_INT 1
5090: DEC
5091: ST_TO_ADDR
5092: LD_INT 6
5094: PUSH
5095: FOR_TO
5096: IFFALSE 5269
// begin case i of 1 :
5098: LD_VAR 0 2
5102: PUSH
5103: LD_INT 1
5105: DOUBLE
5106: EQUAL
5107: IFTRUE 5111
5109: GO 5129
5111: POP
// PlaceUnitArea ( CreateHuman , Base1ApeArea , false ) ; 2 :
5112: CALL_OW 44
5116: PPUSH
5117: LD_INT 1
5119: PPUSH
5120: LD_INT 0
5122: PPUSH
5123: CALL_OW 49
5127: GO 5260
5129: LD_INT 2
5131: DOUBLE
5132: EQUAL
5133: IFTRUE 5137
5135: GO 5155
5137: POP
// PlaceUnitArea ( CreateHuman , Base2ApeArea , false ) ; 3 :
5138: CALL_OW 44
5142: PPUSH
5143: LD_INT 2
5145: PPUSH
5146: LD_INT 0
5148: PPUSH
5149: CALL_OW 49
5153: GO 5260
5155: LD_INT 3
5157: DOUBLE
5158: EQUAL
5159: IFTRUE 5163
5161: GO 5181
5163: POP
// PlaceUnitArea ( CreateHuman , Base3ApeArea , false ) ; 4 :
5164: CALL_OW 44
5168: PPUSH
5169: LD_INT 3
5171: PPUSH
5172: LD_INT 0
5174: PPUSH
5175: CALL_OW 49
5179: GO 5260
5181: LD_INT 4
5183: DOUBLE
5184: EQUAL
5185: IFTRUE 5189
5187: GO 5207
5189: POP
// PlaceUnitArea ( CreateHuman , Base4ApeArea , false ) ; 5 :
5190: CALL_OW 44
5194: PPUSH
5195: LD_INT 4
5197: PPUSH
5198: LD_INT 0
5200: PPUSH
5201: CALL_OW 49
5205: GO 5260
5207: LD_INT 5
5209: DOUBLE
5210: EQUAL
5211: IFTRUE 5215
5213: GO 5233
5215: POP
// PlaceUnitArea ( CreateHuman , Base5ApeArea , false ) ; 6 :
5216: CALL_OW 44
5220: PPUSH
5221: LD_INT 5
5223: PPUSH
5224: LD_INT 0
5226: PPUSH
5227: CALL_OW 49
5231: GO 5260
5233: LD_INT 6
5235: DOUBLE
5236: EQUAL
5237: IFTRUE 5241
5239: GO 5259
5241: POP
// PlaceUnitArea ( CreateHuman , Base6ApeArea , false ) ; end ;
5242: CALL_OW 44
5246: PPUSH
5247: LD_INT 6
5249: PPUSH
5250: LD_INT 0
5252: PPUSH
5253: CALL_OW 49
5257: GO 5260
5259: POP
// Wait ( 3 ) ;
5260: LD_INT 3
5262: PPUSH
5263: CALL_OW 67
// end ;
5267: GO 5095
5269: POP
5270: POP
// ape := ape + 1 ;
5271: LD_ADDR_VAR 0 5
5275: PUSH
5276: LD_VAR 0 5
5280: PUSH
5281: LD_INT 1
5283: PLUS
5284: ST_TO_ADDR
// until ape >= amount_of_apemen ;
5285: LD_VAR 0 5
5289: PUSH
5290: LD_EXP 26
5294: GREATEREQUAL
5295: IFFALSE 5053
// end ;
5297: LD_VAR 0 1
5301: RET
// every 0 0$15 do
5302: GO 5304
5304: DISABLE
// begin prepare_apemen ;
5305: CALL 5026 0 0
// end ; end_of_file
5309: END
// var respawn , inqueue ; export function init_respawning ; begin
5310: LD_INT 0
5312: PPUSH
// respawn := Rand ( 1 , 8 ) ;
5313: LD_ADDR_LOC 5
5317: PUSH
5318: LD_INT 1
5320: PPUSH
5321: LD_INT 8
5323: PPUSH
5324: CALL_OW 12
5328: ST_TO_ADDR
// inqueue := [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
5329: LD_ADDR_LOC 6
5333: PUSH
5334: LD_INT 0
5336: PUSH
5337: LD_INT 0
5339: PUSH
5340: LD_INT 0
5342: PUSH
5343: LD_INT 0
5345: PUSH
5346: LD_INT 0
5348: PUSH
5349: LD_INT 0
5351: PUSH
5352: LD_INT 0
5354: PUSH
5355: LD_INT 0
5357: PUSH
5358: EMPTY
5359: LIST
5360: LIST
5361: LIST
5362: LIST
5363: LIST
5364: LIST
5365: LIST
5366: LIST
5367: ST_TO_ADDR
// end ;
5368: LD_VAR 0 1
5372: RET
// every 0 0$1 + 0 0$1 do var n , dep , aktresp ;
5373: GO 5375
5375: DISABLE
5376: LD_INT 0
5378: PPUSH
5379: PPUSH
5380: PPUSH
// begin if respawning_time_max = 0 then
5381: LD_EXP 29
5385: PUSH
5386: LD_INT 0
5388: EQUAL
5389: IFFALSE 5393
// exit ;
5391: GO 5798
// if respawn = 8 then
5393: LD_LOC 5
5397: PUSH
5398: LD_INT 8
5400: EQUAL
5401: IFFALSE 5413
// respawn := 1 else
5403: LD_ADDR_LOC 5
5407: PUSH
5408: LD_INT 1
5410: ST_TO_ADDR
5411: GO 5427
// respawn := respawn + 1 ;
5413: LD_ADDR_LOC 5
5417: PUSH
5418: LD_LOC 5
5422: PUSH
5423: LD_INT 1
5425: PLUS
5426: ST_TO_ADDR
// if Side_Positions [ respawn ] and not inqueue [ respawn ] then
5427: LD_EXP 46
5431: PUSH
5432: LD_LOC 5
5436: ARRAY
5437: PUSH
5438: LD_LOC 6
5442: PUSH
5443: LD_LOC 5
5447: ARRAY
5448: NOT
5449: AND
5450: IFFALSE 5797
// begin n := FilterAllUnits ( [ [ f_type , unit_human ] , [ f_side , respawn ] , f_not , [ f_nation , nation_nature ] ] ) ;
5452: LD_ADDR_VAR 0 1
5456: PUSH
5457: LD_INT 21
5459: PUSH
5460: LD_INT 1
5462: PUSH
5463: EMPTY
5464: LIST
5465: LIST
5466: PUSH
5467: LD_INT 22
5469: PUSH
5470: LD_LOC 5
5474: PUSH
5475: EMPTY
5476: LIST
5477: LIST
5478: PUSH
5479: LD_INT 3
5481: PUSH
5482: LD_INT 23
5484: PUSH
5485: LD_INT 0
5487: PUSH
5488: EMPTY
5489: LIST
5490: LIST
5491: PUSH
5492: EMPTY
5493: LIST
5494: LIST
5495: LIST
5496: LIST
5497: PPUSH
5498: CALL_OW 69
5502: ST_TO_ADDR
// if n < number_of_people then
5503: LD_VAR 0 1
5507: PUSH
5508: LD_EXP 21
5512: LESS
5513: IFFALSE 5794
// begin dep := FilterAllUnits ( [ [ f_type , unit_building ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] , [ f_ok ] , [ f_side , respawn ] ] ) ;
5515: LD_ADDR_VAR 0 2
5519: PUSH
5520: LD_INT 21
5522: PUSH
5523: LD_INT 3
5525: PUSH
5526: EMPTY
5527: LIST
5528: LIST
5529: PUSH
5530: LD_INT 2
5532: PUSH
5533: LD_INT 30
5535: PUSH
5536: LD_INT 0
5538: PUSH
5539: EMPTY
5540: LIST
5541: LIST
5542: PUSH
5543: LD_INT 30
5545: PUSH
5546: LD_INT 1
5548: PUSH
5549: EMPTY
5550: LIST
5551: LIST
5552: PUSH
5553: EMPTY
5554: LIST
5555: LIST
5556: LIST
5557: PUSH
5558: LD_INT 50
5560: PUSH
5561: EMPTY
5562: LIST
5563: PUSH
5564: LD_INT 22
5566: PUSH
5567: LD_LOC 5
5571: PUSH
5572: EMPTY
5573: LIST
5574: LIST
5575: PUSH
5576: EMPTY
5577: LIST
5578: LIST
5579: LIST
5580: LIST
5581: PPUSH
5582: CALL_OW 69
5586: ST_TO_ADDR
// if dep then
5587: LD_VAR 0 2
5591: IFFALSE 5791
// begin aktresp := respawn ;
5593: LD_ADDR_VAR 0 3
5597: PUSH
5598: LD_LOC 5
5602: ST_TO_ADDR
// inqueue := Replace ( inqueue , aktresp , true ) ;
5603: LD_ADDR_LOC 6
5607: PUSH
5608: LD_LOC 6
5612: PPUSH
5613: LD_VAR 0 3
5617: PPUSH
5618: LD_INT 1
5620: PPUSH
5621: CALL_OW 1
5625: ST_TO_ADDR
// enable ;
5626: ENABLE
// wait ( rand ( respawning_time_min , respawning_time_max ) ) ;
5627: LD_EXP 28
5631: PPUSH
5632: LD_EXP 29
5636: PPUSH
5637: CALL_OW 12
5641: PPUSH
5642: CALL_OW 67
// inqueue := Replace ( inqueue , aktresp , false ) ;
5646: LD_ADDR_LOC 6
5650: PUSH
5651: LD_LOC 6
5655: PPUSH
5656: LD_VAR 0 3
5660: PPUSH
5661: LD_INT 0
5663: PPUSH
5664: CALL_OW 1
5668: ST_TO_ADDR
// hc_name :=  ;
5669: LD_ADDR_OWVAR 26
5673: PUSH
5674: LD_STRING 
5676: ST_TO_ADDR
// hc_importance := 0 ;
5677: LD_ADDR_OWVAR 32
5681: PUSH
5682: LD_INT 0
5684: ST_TO_ADDR
// PrepareHuman ( 0 , 0 , skill_level div 2 ) ;
5685: LD_INT 0
5687: PPUSH
5688: LD_INT 0
5690: PPUSH
5691: LD_EXP 22
5695: PUSH
5696: LD_INT 2
5698: DIV
5699: PPUSH
5700: CALL_OW 380
// uc_nation := Side_Nations [ aktresp ] ;
5704: LD_ADDR_OWVAR 21
5708: PUSH
5709: LD_EXP 47
5713: PUSH
5714: LD_VAR 0 3
5718: ARRAY
5719: ST_TO_ADDR
// uc_side := aktresp ;
5720: LD_ADDR_OWVAR 20
5724: PUSH
5725: LD_VAR 0 3
5729: ST_TO_ADDR
// dep := dep [ Rand ( 1 , dep ) ] ;
5730: LD_ADDR_VAR 0 2
5734: PUSH
5735: LD_VAR 0 2
5739: PUSH
5740: LD_INT 1
5742: PPUSH
5743: LD_VAR 0 2
5747: PPUSH
5748: CALL_OW 12
5752: ARRAY
5753: ST_TO_ADDR
// PlaceUnitXYR ( CreateHuman , GetX ( dep ) , GetY ( dep ) , 7 , true ) ;
5754: CALL_OW 44
5758: PPUSH
5759: LD_VAR 0 2
5763: PPUSH
5764: CALL_OW 250
5768: PPUSH
5769: LD_VAR 0 2
5773: PPUSH
5774: CALL_OW 251
5778: PPUSH
5779: LD_INT 7
5781: PPUSH
5782: LD_INT 1
5784: PPUSH
5785: CALL_OW 50
// end else
5789: GO 5792
// enable ;
5791: ENABLE
// end else
5792: GO 5795
// enable ;
5794: ENABLE
// end else
5795: GO 5798
// enable ;
5797: ENABLE
// end ; end_of_file
5798: PPOPN 3
5800: END
// function DisplayNames ; var i ; begin
5801: LD_INT 0
5803: PPUSH
5804: PPUSH
// for i in FilterAllUnits ( [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ) do
5805: LD_ADDR_VAR 0 2
5809: PUSH
5810: LD_INT 2
5812: PUSH
5813: LD_INT 30
5815: PUSH
5816: LD_INT 0
5818: PUSH
5819: EMPTY
5820: LIST
5821: LIST
5822: PUSH
5823: LD_INT 30
5825: PUSH
5826: LD_INT 1
5828: PUSH
5829: EMPTY
5830: LIST
5831: LIST
5832: PUSH
5833: EMPTY
5834: LIST
5835: LIST
5836: LIST
5837: PPUSH
5838: CALL_OW 69
5842: PUSH
5843: FOR_IN
5844: IFFALSE 5871
// SetBName ( i , @ & GetSide ( i ) ) ;
5846: LD_VAR 0 2
5850: PPUSH
5851: LD_STRING @
5853: PUSH
5854: LD_VAR 0 2
5858: PPUSH
5859: CALL_OW 255
5863: STR
5864: PPUSH
5865: CALL_OW 500
5869: GO 5843
5871: POP
5872: POP
// end ;
5873: LD_VAR 0 1
5877: RET
// on BuildingComplete ( b ) do DisplayNames ;
5878: CALL 5801 0 0
5882: PPOPN 1
5884: END
// on BuildingStarted ( b , h ) do DisplayNames ;
5885: CALL 5801 0 0
5889: PPOPN 2
5891: END
// on BuildingCaptured ( b , o , e ) do DisplayNames ;
5892: CALL 5801 0 0
5896: PPOPN 3
5898: END
// every 5 do
5899: GO 5901
5901: DISABLE
// DisplayNames ;
5902: CALL 5801 0 0
5906: END
// on UnitDestroyed ( j ) do var x , y , pos , dir ;
5907: LD_INT 0
5909: PPUSH
5910: PPUSH
5911: PPUSH
5912: PPUSH
// begin if getBType ( j ) in [ b_depot , b_warehouse ] then
5913: LD_VAR 0 1
5917: PPUSH
5918: CALL_OW 266
5922: PUSH
5923: LD_INT 0
5925: PUSH
5926: LD_INT 1
5928: PUSH
5929: EMPTY
5930: LIST
5931: LIST
5932: IN
5933: IFFALSE 6061
// begin pos := Side_Positions [ GetSide ( j ) ] ;
5935: LD_ADDR_VAR 0 4
5939: PUSH
5940: LD_EXP 46
5944: PUSH
5945: LD_VAR 0 1
5949: PPUSH
5950: CALL_OW 255
5954: ARRAY
5955: ST_TO_ADDR
// x := depot_def [ pos ] [ 1 ] ;
5956: LD_ADDR_VAR 0 2
5960: PUSH
5961: LD_EXP 51
5965: PUSH
5966: LD_VAR 0 4
5970: ARRAY
5971: PUSH
5972: LD_INT 1
5974: ARRAY
5975: ST_TO_ADDR
// y := depot_def [ pos ] [ 2 ] ;
5976: LD_ADDR_VAR 0 3
5980: PUSH
5981: LD_EXP 51
5985: PUSH
5986: LD_VAR 0 4
5990: ARRAY
5991: PUSH
5992: LD_INT 2
5994: ARRAY
5995: ST_TO_ADDR
// dir := depot_def [ pos ] [ 3 ] ;
5996: LD_ADDR_VAR 0 5
6000: PUSH
6001: LD_EXP 51
6005: PUSH
6006: LD_VAR 0 4
6010: ARRAY
6011: PUSH
6012: LD_INT 3
6014: ARRAY
6015: ST_TO_ADDR
// KillBattleFlag ( FindBattleFlag ( ShiftX ( x , dir , 10 ) , ShiftY ( y , dir , 10 ) ) ) ;
6016: LD_VAR 0 2
6020: PPUSH
6021: LD_VAR 0 5
6025: PPUSH
6026: LD_INT 10
6028: PPUSH
6029: CALL_OW 272
6033: PPUSH
6034: LD_VAR 0 3
6038: PPUSH
6039: LD_VAR 0 5
6043: PPUSH
6044: LD_INT 10
6046: PPUSH
6047: CALL_OW 273
6051: PPUSH
6052: CALL_OW 420
6056: PPUSH
6057: CALL_OW 419
// end ; end ; end_of_file
6061: PPOPN 5
6063: END
// export clearedfog ; export function CanWinLoose ; begin
6064: LD_INT 0
6066: PPUSH
// Result := false ;
6067: LD_ADDR_VAR 0 1
6071: PUSH
6072: LD_INT 0
6074: ST_TO_ADDR
// if ( not IAmServer and ( ( EnemyCount = 0 ) or ( ( FriendsCount = 0 ) and ( TeamsCount < 2 ) ) ) ) then
6075: CALL_OW 518
6079: NOT
6080: PUSH
6081: CALL_OW 522
6085: PUSH
6086: LD_INT 0
6088: EQUAL
6089: PUSH
6090: CALL_OW 523
6094: PUSH
6095: LD_INT 0
6097: EQUAL
6098: PUSH
6099: CALL_OW 524
6103: PUSH
6104: LD_INT 2
6106: LESS
6107: AND
6108: OR
6109: AND
6110: IFFALSE 6120
// Result := true ;
6112: LD_ADDR_VAR 0 1
6116: PUSH
6117: LD_INT 1
6119: ST_TO_ADDR
// if ( IAmServer and ( PlayerCount = 0 ) ) then
6120: CALL_OW 518
6124: PUSH
6125: CALL_OW 519
6129: PUSH
6130: LD_INT 0
6132: EQUAL
6133: AND
6134: IFFALSE 6144
// Result := true ;
6136: LD_ADDR_VAR 0 1
6140: PUSH
6141: LD_INT 1
6143: ST_TO_ADDR
// if ( IAmSpec ) then
6144: CALL_OW 531
6148: IFFALSE 6178
// if ( PlayerCount <= 1 ) then
6150: CALL_OW 519
6154: PUSH
6155: LD_INT 1
6157: LESSEQUAL
6158: IFFALSE 6170
// Result := true else
6160: LD_ADDR_VAR 0 1
6164: PUSH
6165: LD_INT 1
6167: ST_TO_ADDR
6168: GO 6178
// Result := false ;
6170: LD_ADDR_VAR 0 1
6174: PUSH
6175: LD_INT 0
6177: ST_TO_ADDR
// end ;
6178: LD_VAR 0 1
6182: RET
// export function init_win_condition ; begin
6183: LD_INT 0
6185: PPUSH
// case Game_Type of 1 , 2 , 4 :
6186: LD_EXP 1
6190: PUSH
6191: LD_INT 1
6193: DOUBLE
6194: EQUAL
6195: IFTRUE 6211
6197: LD_INT 2
6199: DOUBLE
6200: EQUAL
6201: IFTRUE 6211
6203: LD_INT 4
6205: DOUBLE
6206: EQUAL
6207: IFTRUE 6211
6209: GO 6228
6211: POP
// if Team_Game then
6212: LD_EXP 50
6216: IFFALSE 6223
// enable ( 98 ) else
6218: LD_INT 98
6220: ENABLE_MARKED
6221: GO 6226
// enable ( 99 ) ; 3 :
6223: LD_INT 99
6225: ENABLE_MARKED
6226: GO 6273
6228: LD_INT 3
6230: DOUBLE
6231: EQUAL
6232: IFTRUE 6236
6234: GO 6252
6236: POP
// begin Wait ( 0 0$5 ) ;
6237: LD_INT 175
6239: PPUSH
6240: CALL_OW 67
// enable ( 99 ) ;
6244: LD_INT 99
6246: ENABLE_MARKED
// enable ( 100 ) ;
6247: LD_INT 100
6249: ENABLE_MARKED
// end ; 10 , 11 :
6250: GO 6273
6252: LD_INT 10
6254: DOUBLE
6255: EQUAL
6256: IFTRUE 6266
6258: LD_INT 11
6260: DOUBLE
6261: EQUAL
6262: IFTRUE 6266
6264: GO 6272
6266: POP
// begin enable ( 101 ) ;
6267: LD_INT 101
6269: ENABLE_MARKED
// end ; end ;
6270: GO 6273
6272: POP
// end ;
6273: LD_VAR 0 1
6277: RET
// every 0 0$2 marked 98 do var win , i ;
6278: GO 6280
6280: DISABLE
6281: LD_INT 0
6283: PPUSH
6284: PPUSH
// begin if CanWinLoose then
6285: CALL 6064 0 0
6289: IFFALSE 6503
// if your_side then
6291: LD_OWVAR 2
6295: IFFALSE 6503
// if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
6297: LD_INT 22
6299: PUSH
6300: LD_OWVAR 2
6304: PUSH
6305: EMPTY
6306: LIST
6307: LIST
6308: PUSH
6309: LD_INT 2
6311: PUSH
6312: LD_INT 21
6314: PUSH
6315: LD_INT 1
6317: PUSH
6318: EMPTY
6319: LIST
6320: LIST
6321: PUSH
6322: LD_INT 30
6324: PUSH
6325: LD_INT 0
6327: PUSH
6328: EMPTY
6329: LIST
6330: LIST
6331: PUSH
6332: LD_INT 30
6334: PUSH
6335: LD_INT 1
6337: PUSH
6338: EMPTY
6339: LIST
6340: LIST
6341: PUSH
6342: EMPTY
6343: LIST
6344: LIST
6345: LIST
6346: LIST
6347: PUSH
6348: EMPTY
6349: LIST
6350: LIST
6351: PPUSH
6352: CALL_OW 69
6356: NOT
6357: IFFALSE 6374
// begin wait ( 0 0$3 ) ;
6359: LD_INT 105
6361: PPUSH
6362: CALL_OW 67
// YouLostInMultiplayer ;
6366: CALL_OW 107
// exit ;
6370: GO 6504
// end else
6372: GO 6503
// begin win := true ;
6374: LD_ADDR_VAR 0 1
6378: PUSH
6379: LD_INT 1
6381: ST_TO_ADDR
// for i = 1 to Side_positions do
6382: LD_ADDR_VAR 0 2
6386: PUSH
6387: DOUBLE
6388: LD_INT 1
6390: DEC
6391: ST_TO_ADDR
6392: LD_EXP 46
6396: PUSH
6397: FOR_TO
6398: IFFALSE 6482
// if Side_positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
6400: LD_EXP 46
6404: PUSH
6405: LD_VAR 0 2
6409: ARRAY
6410: PUSH
6411: LD_VAR 0 2
6415: PUSH
6416: LD_OWVAR 2
6420: NONEQUAL
6421: AND
6422: PUSH
6423: LD_VAR 0 2
6427: PPUSH
6428: CALL_OW 108
6432: AND
6433: IFFALSE 6480
// begin if not Side_Teams [ i ] or ( Side_Teams [ i ] <> Side_Teams [ your_side ] ) then
6435: LD_EXP 43
6439: PUSH
6440: LD_VAR 0 2
6444: ARRAY
6445: NOT
6446: PUSH
6447: LD_EXP 43
6451: PUSH
6452: LD_VAR 0 2
6456: ARRAY
6457: PUSH
6458: LD_EXP 43
6462: PUSH
6463: LD_OWVAR 2
6467: ARRAY
6468: NONEQUAL
6469: OR
6470: IFFALSE 6480
// win := false ;
6472: LD_ADDR_VAR 0 1
6476: PUSH
6477: LD_INT 0
6479: ST_TO_ADDR
// end ;
6480: GO 6397
6482: POP
6483: POP
// if win then
6484: LD_VAR 0 1
6488: IFFALSE 6503
// begin wait ( 0 0$3 ) ;
6490: LD_INT 105
6492: PPUSH
6493: CALL_OW 67
// YouWinInMultiplayer ;
6497: CALL_OW 106
// exit ;
6501: GO 6504
// end ; end ; enable ;
6503: ENABLE
// end ;
6504: PPOPN 2
6506: END
// every 0 0$3 marked 99 do var win , i ;
6507: GO 6509
6509: DISABLE
6510: LD_INT 0
6512: PPUSH
6513: PPUSH
// begin if CanWinLoose then
6514: CALL 6064 0 0
6518: IFFALSE 6706
// if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
6520: LD_INT 22
6522: PUSH
6523: LD_OWVAR 2
6527: PUSH
6528: EMPTY
6529: LIST
6530: LIST
6531: PUSH
6532: LD_INT 2
6534: PUSH
6535: LD_INT 21
6537: PUSH
6538: LD_INT 1
6540: PUSH
6541: EMPTY
6542: LIST
6543: LIST
6544: PUSH
6545: LD_INT 30
6547: PUSH
6548: LD_INT 0
6550: PUSH
6551: EMPTY
6552: LIST
6553: LIST
6554: PUSH
6555: LD_INT 30
6557: PUSH
6558: LD_INT 1
6560: PUSH
6561: EMPTY
6562: LIST
6563: LIST
6564: PUSH
6565: EMPTY
6566: LIST
6567: LIST
6568: LIST
6569: LIST
6570: PUSH
6571: EMPTY
6572: LIST
6573: LIST
6574: PPUSH
6575: CALL_OW 69
6579: NOT
6580: IFFALSE 6597
// begin wait ( 0 0$3 ) ;
6582: LD_INT 105
6584: PPUSH
6585: CALL_OW 67
// YouLostInMultiplayer ;
6589: CALL_OW 107
// exit ;
6593: GO 6707
// end else
6595: GO 6706
// begin win := true ;
6597: LD_ADDR_VAR 0 1
6601: PUSH
6602: LD_INT 1
6604: ST_TO_ADDR
// for i = 1 to Side_Positions do
6605: LD_ADDR_VAR 0 2
6609: PUSH
6610: DOUBLE
6611: LD_INT 1
6613: DEC
6614: ST_TO_ADDR
6615: LD_EXP 46
6619: PUSH
6620: FOR_TO
6621: IFFALSE 6685
// if Side_Positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
6623: LD_EXP 46
6627: PUSH
6628: LD_VAR 0 2
6632: ARRAY
6633: PUSH
6634: LD_VAR 0 2
6638: PUSH
6639: LD_OWVAR 2
6643: NONEQUAL
6644: AND
6645: PUSH
6646: LD_VAR 0 2
6650: PPUSH
6651: CALL_OW 108
6655: AND
6656: IFFALSE 6683
// if not AlliedSides ( i , your_side ) then
6658: LD_VAR 0 2
6662: PPUSH
6663: LD_OWVAR 2
6667: PPUSH
6668: CALL 6953 0 2
6672: NOT
6673: IFFALSE 6683
// win := false ;
6675: LD_ADDR_VAR 0 1
6679: PUSH
6680: LD_INT 0
6682: ST_TO_ADDR
6683: GO 6620
6685: POP
6686: POP
// if win then
6687: LD_VAR 0 1
6691: IFFALSE 6706
// begin wait ( 0 0$3 ) ;
6693: LD_INT 105
6695: PPUSH
6696: CALL_OW 67
// YouWinInMultiplayer ;
6700: CALL_OW 106
// exit ;
6704: GO 6707
// end ; end ; enable ;
6706: ENABLE
// end ;
6707: PPOPN 2
6709: END
// every 0 0$3 marked 101 do var win , i ;
6710: GO 6712
6712: DISABLE
6713: LD_INT 0
6715: PPUSH
6716: PPUSH
// begin if not FilterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
6717: LD_INT 22
6719: PUSH
6720: LD_OWVAR 2
6724: PUSH
6725: EMPTY
6726: LIST
6727: LIST
6728: PUSH
6729: LD_INT 2
6731: PUSH
6732: LD_INT 21
6734: PUSH
6735: LD_INT 1
6737: PUSH
6738: EMPTY
6739: LIST
6740: LIST
6741: PUSH
6742: LD_INT 30
6744: PUSH
6745: LD_INT 0
6747: PUSH
6748: EMPTY
6749: LIST
6750: LIST
6751: PUSH
6752: LD_INT 30
6754: PUSH
6755: LD_INT 1
6757: PUSH
6758: EMPTY
6759: LIST
6760: LIST
6761: PUSH
6762: EMPTY
6763: LIST
6764: LIST
6765: LIST
6766: LIST
6767: PUSH
6768: EMPTY
6769: LIST
6770: LIST
6771: PPUSH
6772: CALL_OW 69
6776: NOT
6777: IFFALSE 6831
// begin wait ( 0 0$3 ) ;
6779: LD_INT 105
6781: PPUSH
6782: CALL_OW 67
// if CanWinLoose then
6786: CALL 6064 0 0
6790: IFFALSE 6798
// YouLostInMultiplayer else
6792: CALL_OW 107
6796: GO 6827
// begin if not clearedfog then
6798: LD_EXP 59
6802: NOT
6803: IFFALSE 6826
// begin ClearAllFogForSide ( your_side ) ;
6805: LD_OWVAR 2
6809: PPUSH
6810: CALL_OW 520
// clearedfog := true ;
6814: LD_ADDR_EXP 59
6818: PUSH
6819: LD_INT 1
6821: ST_TO_ADDR
// Multiplayer_Loose_Message ;
6822: CALL_OW 521
// end ; enable ;
6826: ENABLE
// end ; exit ;
6827: GO 6950
// end else
6829: GO 6949
// begin win := true ;
6831: LD_ADDR_VAR 0 1
6835: PUSH
6836: LD_INT 1
6838: ST_TO_ADDR
// for i = 1 to Side_Positions do
6839: LD_ADDR_VAR 0 2
6843: PUSH
6844: DOUBLE
6845: LD_INT 1
6847: DEC
6848: ST_TO_ADDR
6849: LD_EXP 46
6853: PUSH
6854: FOR_TO
6855: IFFALSE 6919
// if Side_Positions [ i ] and ( i <> your_side ) and MultiplayerSideAlive ( i ) then
6857: LD_EXP 46
6861: PUSH
6862: LD_VAR 0 2
6866: ARRAY
6867: PUSH
6868: LD_VAR 0 2
6872: PUSH
6873: LD_OWVAR 2
6877: NONEQUAL
6878: AND
6879: PUSH
6880: LD_VAR 0 2
6884: PPUSH
6885: CALL_OW 108
6889: AND
6890: IFFALSE 6917
// if not AlliedSides ( i , your_side ) then
6892: LD_VAR 0 2
6896: PPUSH
6897: LD_OWVAR 2
6901: PPUSH
6902: CALL 6953 0 2
6906: NOT
6907: IFFALSE 6917
// win := false ;
6909: LD_ADDR_VAR 0 1
6913: PUSH
6914: LD_INT 0
6916: ST_TO_ADDR
6917: GO 6854
6919: POP
6920: POP
// if win then
6921: LD_VAR 0 1
6925: IFFALSE 6949
// begin wait ( 0 0$3 ) ;
6927: LD_INT 105
6929: PPUSH
6930: CALL_OW 67
// if CanWinLoose then
6934: CALL 6064 0 0
6938: IFFALSE 6946
// YouWinInMultiplayer else
6940: CALL_OW 106
6944: GO 6947
// enable ;
6946: ENABLE
// exit ;
6947: GO 6950
// end ; end ; enable ;
6949: ENABLE
// end ;
6950: PPOPN 2
6952: END
// function AlliedSides ( i , j ) ; var vysledek ; begin
6953: LD_INT 0
6955: PPUSH
6956: PPUSH
// vysledek := false ;
6957: LD_ADDR_VAR 0 4
6961: PUSH
6962: LD_INT 0
6964: ST_TO_ADDR
// if ( GetAttitude ( i , j ) = att_friend ) and ( GetAttitude ( j , i ) = att_friend ) and GetAlliedVictory ( i ) and GetAlliedVictory ( j ) then
6965: LD_VAR 0 1
6969: PPUSH
6970: LD_VAR 0 2
6974: PPUSH
6975: CALL_OW 81
6979: PUSH
6980: LD_INT 1
6982: EQUAL
6983: PUSH
6984: LD_VAR 0 2
6988: PPUSH
6989: LD_VAR 0 1
6993: PPUSH
6994: CALL_OW 81
6998: PUSH
6999: LD_INT 1
7001: EQUAL
7002: AND
7003: PUSH
7004: LD_VAR 0 1
7008: PPUSH
7009: CALL_OW 83
7013: AND
7014: PUSH
7015: LD_VAR 0 2
7019: PPUSH
7020: CALL_OW 83
7024: AND
7025: IFFALSE 7035
// vysledek := true ;
7027: LD_ADDR_VAR 0 4
7031: PUSH
7032: LD_INT 1
7034: ST_TO_ADDR
// result := vysledek ;
7035: LD_ADDR_VAR 0 3
7039: PUSH
7040: LD_VAR 0 4
7044: ST_TO_ADDR
// end ;
7045: LD_VAR 0 3
7049: RET
// every 3 marked 100 do var side ;
7050: GO 7052
7052: DISABLE
7053: LD_INT 0
7055: PPUSH
// begin for side = 1 to Side_Positions do
7056: LD_ADDR_VAR 0 1
7060: PUSH
7061: DOUBLE
7062: LD_INT 1
7064: DEC
7065: ST_TO_ADDR
7066: LD_EXP 46
7070: PUSH
7071: FOR_TO
7072: IFFALSE 7110
// if Side_Positions [ side ] then
7074: LD_EXP 46
7078: PUSH
7079: LD_VAR 0 1
7083: ARRAY
7084: IFFALSE 7108
// if sib_mined [ side ] >= amount_of_siberit then
7086: LD_EXP 60
7090: PUSH
7091: LD_VAR 0 1
7095: ARRAY
7096: PUSH
7097: LD_EXP 27
7101: GREATEREQUAL
7102: IFFALSE 7108
// show_that_you_are_winner_or_looser ;
7104: CALL 7116 0 0
7108: GO 7071
7110: POP
7111: POP
// enable ;
7112: ENABLE
// end ;
7113: PPOPN 1
7115: END
// function show_that_you_are_winner_or_looser ; begin
7116: LD_INT 0
7118: PPUSH
// if sib_mined [ your_side ] >= amount_of_siberit then
7119: LD_EXP 60
7123: PUSH
7124: LD_OWVAR 2
7128: ARRAY
7129: PUSH
7130: LD_EXP 27
7134: GREATEREQUAL
7135: IFFALSE 7152
// begin wait ( 0 0$3 ) ;
7137: LD_INT 105
7139: PPUSH
7140: CALL_OW 67
// YouWinInMultiplayer ;
7144: CALL_OW 106
// exit ;
7148: GO 7165
// end else
7150: GO 7165
// begin wait ( 0 0$3 ) ;
7152: LD_INT 105
7154: PPUSH
7155: CALL_OW 67
// YouLostInMultiplayer ;
7159: CALL_OW 107
// exit ;
7163: GO 7165
// end ; end ; end_of_file
7165: LD_VAR 0 1
7169: RET
// every 10 do
7170: GO 7172
7172: DISABLE
// begin if not multiplayer then
7173: LD_OWVAR 4
7177: NOT
7178: IFFALSE 7182
// exit ;
7180: GO 7239
// if ( tick >= 100 ) then
7182: LD_OWVAR 1
7186: PUSH
7187: LD_INT 100
7189: GREATEREQUAL
7190: IFFALSE 7210
// if tick mod 20 = 0 then
7192: LD_OWVAR 1
7196: PUSH
7197: LD_INT 20
7199: MOD
7200: PUSH
7201: LD_INT 0
7203: EQUAL
7204: IFFALSE 7210
// MultiplayerCRC ;
7206: CALL_OW 361
// if ( tick >= 100 ) then
7210: LD_OWVAR 1
7214: PUSH
7215: LD_INT 100
7217: GREATEREQUAL
7218: IFFALSE 7238
// if tick mod 30 = 0 then
7220: LD_OWVAR 1
7224: PUSH
7225: LD_INT 30
7227: MOD
7228: PUSH
7229: LD_INT 0
7231: EQUAL
7232: IFFALSE 7238
// DebugLogAll ;
7234: CALL_OW 360
// enable ;
7238: ENABLE
// end ;
7239: END
// every 0 0$30 do
7240: GO 7242
7242: DISABLE
// begin Anticheatcheck ;
7243: CALL_OW 514
// enable ;
7247: ENABLE
// end ; end_of_file
7248: END
// export sib_mined ; every 0 0$1 trigger Game_Type = 3 do var name , side , base , pom , filter , output ;
7249: LD_EXP 1
7253: PUSH
7254: LD_INT 3
7256: EQUAL
7257: IFFALSE 7603
7259: GO 7261
7261: DISABLE
7262: LD_INT 0
7264: PPUSH
7265: PPUSH
7266: PPUSH
7267: PPUSH
7268: PPUSH
7269: PPUSH
// begin sib_mined := [ ] ;
7270: LD_ADDR_EXP 60
7274: PUSH
7275: EMPTY
7276: ST_TO_ADDR
// for side = 1 to Side_Positions do
7277: LD_ADDR_VAR 0 2
7281: PUSH
7282: DOUBLE
7283: LD_INT 1
7285: DEC
7286: ST_TO_ADDR
7287: LD_EXP 46
7291: PUSH
7292: FOR_TO
7293: IFFALSE 7449
// if Side_Positions [ side ] then
7295: LD_EXP 46
7299: PUSH
7300: LD_VAR 0 2
7304: ARRAY
7305: IFFALSE 7433
// begin filter := FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
7307: LD_ADDR_VAR 0 5
7311: PUSH
7312: LD_INT 22
7314: PUSH
7315: LD_VAR 0 2
7319: PUSH
7320: EMPTY
7321: LIST
7322: LIST
7323: PUSH
7324: LD_INT 2
7326: PUSH
7327: LD_INT 30
7329: PUSH
7330: LD_INT 0
7332: PUSH
7333: EMPTY
7334: LIST
7335: LIST
7336: PUSH
7337: LD_INT 30
7339: PUSH
7340: LD_INT 1
7342: PUSH
7343: EMPTY
7344: LIST
7345: LIST
7346: PUSH
7347: EMPTY
7348: LIST
7349: LIST
7350: LIST
7351: PUSH
7352: EMPTY
7353: LIST
7354: LIST
7355: PPUSH
7356: CALL_OW 69
7360: ST_TO_ADDR
// pom := 0 ;
7361: LD_ADDR_VAR 0 4
7365: PUSH
7366: LD_INT 0
7368: ST_TO_ADDR
// for base in filter do
7369: LD_ADDR_VAR 0 3
7373: PUSH
7374: LD_VAR 0 5
7378: PUSH
7379: FOR_IN
7380: IFFALSE 7413
// pom := pom + GetResourceType ( GetBase ( base ) , mat_siberit ) ;
7382: LD_ADDR_VAR 0 4
7386: PUSH
7387: LD_VAR 0 4
7391: PUSH
7392: LD_VAR 0 3
7396: PPUSH
7397: CALL_OW 274
7401: PPUSH
7402: LD_INT 3
7404: PPUSH
7405: CALL_OW 275
7409: PLUS
7410: ST_TO_ADDR
7411: GO 7379
7413: POP
7414: POP
// sib_mined := sib_mined ^ pom ;
7415: LD_ADDR_EXP 60
7419: PUSH
7420: LD_EXP 60
7424: PUSH
7425: LD_VAR 0 4
7429: ADD
7430: ST_TO_ADDR
// end else
7431: GO 7447
// sib_mined := sib_mined ^ 0 ;
7433: LD_ADDR_EXP 60
7437: PUSH
7438: LD_EXP 60
7442: PUSH
7443: LD_INT 0
7445: ADD
7446: ST_TO_ADDR
7447: GO 7292
7449: POP
7450: POP
// if not def_public_score then
7451: LD_EXP 15
7455: NOT
7456: IFFALSE 7569
// begin output := [ #Multi1x1-Time , tick ] ;
7458: LD_ADDR_VAR 0 6
7462: PUSH
7463: LD_STRING #Multi1x1-Time
7465: PUSH
7466: LD_OWVAR 1
7470: PUSH
7471: EMPTY
7472: LIST
7473: LIST
7474: ST_TO_ADDR
// for side = 1 to Side_Positions do
7475: LD_ADDR_VAR 0 2
7479: PUSH
7480: DOUBLE
7481: LD_INT 1
7483: DEC
7484: ST_TO_ADDR
7485: LD_EXP 46
7489: PUSH
7490: FOR_TO
7491: IFFALSE 7555
// if Side_Positions [ side ] then
7493: LD_EXP 46
7497: PUSH
7498: LD_VAR 0 2
7502: ARRAY
7503: IFFALSE 7553
// output := output ^ ( mp_sides_players_names [ side ] & :  & sib_mined [ side ] & /  & amount_of_siberit ) ;
7505: LD_ADDR_VAR 0 6
7509: PUSH
7510: LD_VAR 0 6
7514: PUSH
7515: LD_OWVAR 19
7519: PUSH
7520: LD_VAR 0 2
7524: ARRAY
7525: PUSH
7526: LD_STRING : 
7528: STR
7529: PUSH
7530: LD_EXP 60
7534: PUSH
7535: LD_VAR 0 2
7539: ARRAY
7540: STR
7541: PUSH
7542: LD_STRING / 
7544: STR
7545: PUSH
7546: LD_EXP 27
7550: STR
7551: ADD
7552: ST_TO_ADDR
7553: GO 7490
7555: POP
7556: POP
// display_strings := output ;
7557: LD_ADDR_OWVAR 47
7561: PUSH
7562: LD_VAR 0 6
7566: ST_TO_ADDR
// end else
7567: GO 7602
// display_strings := [ #Multi1x1-Time , tick , #AlienBase-Mined , sib_mined [ Player_Side ] ] ;
7569: LD_ADDR_OWVAR 47
7573: PUSH
7574: LD_STRING #Multi1x1-Time
7576: PUSH
7577: LD_OWVAR 1
7581: PUSH
7582: LD_STRING #AlienBase-Mined
7584: PUSH
7585: LD_EXP 60
7589: PUSH
7590: LD_EXP 41
7594: ARRAY
7595: PUSH
7596: EMPTY
7597: LIST
7598: LIST
7599: LIST
7600: LIST
7601: ST_TO_ADDR
// enable ;
7602: ENABLE
// end ;
7603: PPOPN 6
7605: END
// every 0 0$1 trigger ( Game_Type < 3 ) or ( Game_Type = 10 ) or ( Game_Type = 11 ) do
7606: LD_EXP 1
7610: PUSH
7611: LD_INT 3
7613: LESS
7614: PUSH
7615: LD_EXP 1
7619: PUSH
7620: LD_INT 10
7622: EQUAL
7623: OR
7624: PUSH
7625: LD_EXP 1
7629: PUSH
7630: LD_INT 11
7632: EQUAL
7633: OR
7634: IFFALSE 7657
7636: GO 7638
7638: DISABLE
// begin display_strings = [ #Multi1x1-Time , tick ] ;
7639: LD_ADDR_OWVAR 47
7643: PUSH
7644: LD_STRING #Multi1x1-Time
7646: PUSH
7647: LD_OWVAR 1
7651: PUSH
7652: EMPTY
7653: LIST
7654: LIST
7655: ST_TO_ADDR
// enable ;
7656: ENABLE
// end ; end_of_file
7657: END
// var strength , lastxwin , lastywin , lastxlost , lastylost ; function Update_Flags ; var un ; begin
7658: LD_INT 0
7660: PPUSH
7661: PPUSH
// for un in battle_flags_id do
7662: LD_ADDR_VAR 0 2
7666: PUSH
7667: LD_EXP 31
7671: PUSH
7672: FOR_IN
7673: IFFALSE 7748
// ChangeBattleFlagOptions ( un , [ [ bfo_defend_bonus_human , strength ] , [ bfo_defend_bonus_vehicle , strength div 2 ] , [ bfo_defend_bonus_building , strength div 5 ] , [ bfo_height , strength ] ] ) ;
7675: LD_VAR 0 2
7679: PPUSH
7680: LD_INT 1
7682: PUSH
7683: LD_LOC 7
7687: PUSH
7688: EMPTY
7689: LIST
7690: LIST
7691: PUSH
7692: LD_INT 2
7694: PUSH
7695: LD_LOC 7
7699: PUSH
7700: LD_INT 2
7702: DIV
7703: PUSH
7704: EMPTY
7705: LIST
7706: LIST
7707: PUSH
7708: LD_INT 3
7710: PUSH
7711: LD_LOC 7
7715: PUSH
7716: LD_INT 5
7718: DIV
7719: PUSH
7720: EMPTY
7721: LIST
7722: LIST
7723: PUSH
7724: LD_INT 20
7726: PUSH
7727: LD_LOC 7
7731: PUSH
7732: EMPTY
7733: LIST
7734: LIST
7735: PUSH
7736: EMPTY
7737: LIST
7738: LIST
7739: LIST
7740: LIST
7741: PPUSH
7742: CALL_OW 423
7746: GO 7672
7748: POP
7749: POP
// end ;
7750: LD_VAR 0 1
7754: RET
// every 0 0$1 do var un ;
7755: GO 7757
7757: DISABLE
7758: LD_INT 0
7760: PPUSH
// begin if not def_morale_flags then
7761: LD_EXP 10
7765: NOT
7766: IFFALSE 7770
// exit ;
7768: GO 7847
// if not morale_decreasing_time then
7770: LD_EXP 30
7774: NOT
7775: IFFALSE 7779
// exit ;
7777: GO 7847
// strength = 100 ;
7779: LD_ADDR_LOC 7
7783: PUSH
7784: LD_INT 100
7786: ST_TO_ADDR
// repeat wait ( morale_decreasing_time ) ;
7787: LD_EXP 30
7791: PPUSH
7792: CALL_OW 67
// strength := strength - 1 ;
7796: LD_ADDR_LOC 7
7800: PUSH
7801: LD_LOC 7
7805: PUSH
7806: LD_INT 1
7808: MINUS
7809: ST_TO_ADDR
// Update_Flags ;
7810: CALL 7658 0 0
// until not strength ;
7814: LD_LOC 7
7818: NOT
7819: IFFALSE 7787
// for un in battle_flags_id do
7821: LD_ADDR_VAR 0 1
7825: PUSH
7826: LD_EXP 31
7830: PUSH
7831: FOR_IN
7832: IFFALSE 7845
// KillBattleFlag ( un ) ;
7834: LD_VAR 0 1
7838: PPUSH
7839: CALL_OW 419
7843: GO 7831
7845: POP
7846: POP
// end ; end_of_file
7847: PPOPN 1
7849: END
// export BloodGods , BloodGods_LastKills , BloodGods_CurrentKills , BloodGods_Positions ; every 0 0$3 trigger Game_Type = 4 do var x ;
7850: LD_EXP 1
7854: PUSH
7855: LD_INT 4
7857: EQUAL
7858: IFFALSE 7967
7860: GO 7862
7862: DISABLE
7863: LD_INT 0
7865: PPUSH
// begin enable ;
7866: ENABLE
// for x := 1 to 8 do
7867: LD_ADDR_VAR 0 1
7871: PUSH
7872: DOUBLE
7873: LD_INT 1
7875: DEC
7876: ST_TO_ADDR
7877: LD_INT 8
7879: PUSH
7880: FOR_TO
7881: IFFALSE 7965
// begin if ( BloodGods_CurrentKills [ x ] > 5 ) then
7883: LD_EXP 63
7887: PUSH
7888: LD_VAR 0 1
7892: ARRAY
7893: PUSH
7894: LD_INT 5
7896: GREATER
7897: IFFALSE 7963
// if ( BloodGods [ x ] = - 1 ) then
7899: LD_EXP 61
7903: PUSH
7904: LD_VAR 0 1
7908: ARRAY
7909: PUSH
7910: LD_INT 1
7912: NEG
7913: EQUAL
7914: IFFALSE 7963
// begin BloodGods_LastKills := Replace ( BloodGods_LastKills , x , BloodGods_LastKills [ x ] + 6 ) ;
7916: LD_ADDR_EXP 62
7920: PUSH
7921: LD_EXP 62
7925: PPUSH
7926: LD_VAR 0 1
7930: PPUSH
7931: LD_EXP 62
7935: PUSH
7936: LD_VAR 0 1
7940: ARRAY
7941: PUSH
7942: LD_INT 6
7944: PLUS
7945: PPUSH
7946: CALL_OW 1
7950: ST_TO_ADDR
// AwakenBloodGod ( x , false ) ;
7951: LD_VAR 0 1
7955: PPUSH
7956: LD_INT 0
7958: PPUSH
7959: CALL 8157 0 2
// end ; end ;
7963: GO 7880
7965: POP
7966: POP
// end ;
7967: PPOPN 1
7969: END
// every 0 0$01 trigger Game_Type = 4 do var BGL , x ;
7970: LD_EXP 1
7974: PUSH
7975: LD_INT 4
7977: EQUAL
7978: IFFALSE 8135
7980: GO 7982
7982: DISABLE
7983: LD_INT 0
7985: PPUSH
7986: PPUSH
// begin enable ;
7987: ENABLE
// for x := 1 to 8 do
7988: LD_ADDR_VAR 0 2
7992: PUSH
7993: DOUBLE
7994: LD_INT 1
7996: DEC
7997: ST_TO_ADDR
7998: LD_INT 8
8000: PUSH
8001: FOR_TO
8002: IFFALSE 8133
// if ( BloodGods [ x ] > - 1 ) then
8004: LD_EXP 61
8008: PUSH
8009: LD_VAR 0 2
8013: ARRAY
8014: PUSH
8015: LD_INT 1
8017: NEG
8018: GREATER
8019: IFFALSE 8131
// if IsLive ( BloodGods [ x ] ) then
8021: LD_EXP 61
8025: PUSH
8026: LD_VAR 0 2
8030: ARRAY
8031: PPUSH
8032: CALL_OW 300
8036: IFFALSE 8131
// begin BGL := GetLives ( BloodGods [ x ] ) ;
8038: LD_ADDR_VAR 0 1
8042: PUSH
8043: LD_EXP 61
8047: PUSH
8048: LD_VAR 0 2
8052: ARRAY
8053: PPUSH
8054: CALL_OW 256
8058: ST_TO_ADDR
// if ( BGL < 1000 ) and ( BGL > 100 ) then
8059: LD_VAR 0 1
8063: PUSH
8064: LD_INT 1000
8066: LESS
8067: PUSH
8068: LD_VAR 0 1
8072: PUSH
8073: LD_INT 100
8075: GREATER
8076: AND
8077: IFFALSE 8131
// begin BGL := BGL + 10 ;
8079: LD_ADDR_VAR 0 1
8083: PUSH
8084: LD_VAR 0 1
8088: PUSH
8089: LD_INT 10
8091: PLUS
8092: ST_TO_ADDR
// if BGL > 1000 then
8093: LD_VAR 0 1
8097: PUSH
8098: LD_INT 1000
8100: GREATER
8101: IFFALSE 8111
// BGL := 1000 ;
8103: LD_ADDR_VAR 0 1
8107: PUSH
8108: LD_INT 1000
8110: ST_TO_ADDR
// SetLives ( BloodGods [ x ] , BGL ) ;
8111: LD_EXP 61
8115: PUSH
8116: LD_VAR 0 2
8120: ARRAY
8121: PPUSH
8122: LD_VAR 0 1
8126: PPUSH
8127: CALL_OW 234
// end ; end ;
8131: GO 8001
8133: POP
8134: POP
// end ;
8135: PPOPN 2
8137: END
// every 0 0$1 trigger Game_Type = 4 do
8138: LD_EXP 1
8142: PUSH
8143: LD_INT 4
8145: EQUAL
8146: IFFALSE 8156
8148: GO 8150
8150: DISABLE
// begin DisplayTimeWithKills ;
8151: CALL 8398 0 0
// enable ;
8155: ENABLE
// end ;
8156: END
// export function AwakenBloodGod ( side , NoDialog ) ; begin
8157: LD_INT 0
8159: PPUSH
// uc_direction := Rand ( 0 , 5 ) ;
8160: LD_ADDR_OWVAR 24
8164: PUSH
8165: LD_INT 0
8167: PPUSH
8168: LD_INT 5
8170: PPUSH
8171: CALL_OW 12
8175: ST_TO_ADDR
// PrepareHuman ( 1 , class_soldier , 15 ) ;
8176: LD_INT 1
8178: PPUSH
8179: LD_INT 1
8181: PPUSH
8182: LD_INT 15
8184: PPUSH
8185: CALL_OW 380
// hc_importance := 106 ;
8189: LD_ADDR_OWVAR 32
8193: PUSH
8194: LD_INT 106
8196: ST_TO_ADDR
// hc_name := Blood God of  & mp_sides_players_names [ side ] ;
8197: LD_ADDR_OWVAR 26
8201: PUSH
8202: LD_STRING Blood God of 
8204: PUSH
8205: LD_OWVAR 19
8209: PUSH
8210: LD_VAR 0 1
8214: ARRAY
8215: STR
8216: ST_TO_ADDR
// uc_nation := Side_Nations [ side ] ;
8217: LD_ADDR_OWVAR 21
8221: PUSH
8222: LD_EXP 47
8226: PUSH
8227: LD_VAR 0 1
8231: ARRAY
8232: ST_TO_ADDR
// uc_side := side ;
8233: LD_ADDR_OWVAR 20
8237: PUSH
8238: LD_VAR 0 1
8242: ST_TO_ADDR
// hc_noskilllimit := true ;
8243: LD_ADDR_OWVAR 76
8247: PUSH
8248: LD_INT 1
8250: ST_TO_ADDR
// hc_agressivity := 50 ;
8251: LD_ADDR_OWVAR 35
8255: PUSH
8256: LD_INT 50
8258: ST_TO_ADDR
// BloodGods := Replace ( BloodGods , Side , CreateHuman ) ;
8259: LD_ADDR_EXP 61
8263: PUSH
8264: LD_EXP 61
8268: PPUSH
8269: LD_VAR 0 1
8273: PPUSH
8274: CALL_OW 44
8278: PPUSH
8279: CALL_OW 1
8283: ST_TO_ADDR
// PlaceUnitXYR ( BloodGods [ side ] , BloodGods_Positions [ Side_Positions [ side ] ] [ 1 ] , BloodGods_Positions [ Side_Positions [ side ] ] [ 2 ] , 10 , false ) ;
8284: LD_EXP 61
8288: PUSH
8289: LD_VAR 0 1
8293: ARRAY
8294: PPUSH
8295: LD_EXP 64
8299: PUSH
8300: LD_EXP 46
8304: PUSH
8305: LD_VAR 0 1
8309: ARRAY
8310: ARRAY
8311: PUSH
8312: LD_INT 1
8314: ARRAY
8315: PPUSH
8316: LD_EXP 64
8320: PUSH
8321: LD_EXP 46
8325: PUSH
8326: LD_VAR 0 1
8330: ARRAY
8331: ARRAY
8332: PUSH
8333: LD_INT 2
8335: ARRAY
8336: PPUSH
8337: LD_INT 10
8339: PPUSH
8340: LD_INT 0
8342: PPUSH
8343: CALL_OW 50
// SetAttr ( BloodGods [ side ] , attr_stamina , 300 ) ;
8347: LD_EXP 61
8351: PUSH
8352: LD_VAR 0 1
8356: ARRAY
8357: PPUSH
8358: LD_INT 1
8360: PPUSH
8361: LD_INT 300
8363: PPUSH
8364: CALL_OW 239
// if not NoDialog then
8368: LD_VAR 0 2
8372: NOT
8373: IFFALSE 8393
// SayRadio ( BloodGods [ side ] , DLAwaken ) ;
8375: LD_EXP 61
8379: PUSH
8380: LD_VAR 0 1
8384: ARRAY
8385: PPUSH
8386: LD_STRING DLAwaken
8388: PPUSH
8389: CALL_OW 94
// end ;
8393: LD_VAR 0 3
8397: RET
// function DisplayTimeWithKills ; var x ; begin
8398: LD_INT 0
8400: PPUSH
8401: PPUSH
// display_strings = [ #Multi1x1-Time , tick ] ^ [  ] ;
8402: LD_ADDR_OWVAR 47
8406: PUSH
8407: LD_STRING #Multi1x1-Time
8409: PUSH
8410: LD_OWVAR 1
8414: PUSH
8415: EMPTY
8416: LIST
8417: LIST
8418: PUSH
8419: LD_STRING 
8421: PUSH
8422: EMPTY
8423: LIST
8424: ADD
8425: ST_TO_ADDR
// for x = 1 to Side_Positions do
8426: LD_ADDR_VAR 0 2
8430: PUSH
8431: DOUBLE
8432: LD_INT 1
8434: DEC
8435: ST_TO_ADDR
8436: LD_EXP 46
8440: PUSH
8441: FOR_TO
8442: IFFALSE 8675
// if Side_Positions [ x ] then
8444: LD_EXP 46
8448: PUSH
8449: LD_VAR 0 2
8453: ARRAY
8454: IFFALSE 8673
// begin BloodGods_CurrentKills := Replace ( BloodGods_CurrentKills , x , GetHumansKilled ( x ) - BloodGods_LastKills [ x ] ) ;
8456: LD_ADDR_EXP 63
8460: PUSH
8461: LD_EXP 63
8465: PPUSH
8466: LD_VAR 0 2
8470: PPUSH
8471: LD_VAR 0 2
8475: PPUSH
8476: CALL_OW 515
8480: PUSH
8481: LD_EXP 62
8485: PUSH
8486: LD_VAR 0 2
8490: ARRAY
8491: MINUS
8492: PPUSH
8493: CALL_OW 1
8497: ST_TO_ADDR
// if ( BloodGods [ x ] > - 1 ) and ( IsLive ( BloodGods [ x ] ) ) then
8498: LD_EXP 61
8502: PUSH
8503: LD_VAR 0 2
8507: ARRAY
8508: PUSH
8509: LD_INT 1
8511: NEG
8512: GREATER
8513: PUSH
8514: LD_EXP 61
8518: PUSH
8519: LD_VAR 0 2
8523: ARRAY
8524: PPUSH
8525: CALL_OW 300
8529: AND
8530: IFFALSE 8563
// display_strings = display_strings ^ [ mp_sides_players_names [ x ] &  - Blood God Awoken ] else
8532: LD_ADDR_OWVAR 47
8536: PUSH
8537: LD_OWVAR 47
8541: PUSH
8542: LD_OWVAR 19
8546: PUSH
8547: LD_VAR 0 2
8551: ARRAY
8552: PUSH
8553: LD_STRING  - Blood God Awoken
8555: STR
8556: PUSH
8557: EMPTY
8558: LIST
8559: ADD
8560: ST_TO_ADDR
8561: GO 8673
// if ( BloodGods [ x ] > - 1 ) and ( IsDead ( BloodGods [ x ] ) ) then
8563: LD_EXP 61
8567: PUSH
8568: LD_VAR 0 2
8572: ARRAY
8573: PUSH
8574: LD_INT 1
8576: NEG
8577: GREATER
8578: PUSH
8579: LD_EXP 61
8583: PUSH
8584: LD_VAR 0 2
8588: ARRAY
8589: PPUSH
8590: CALL_OW 301
8594: AND
8595: IFFALSE 8628
// display_strings = display_strings ^ [ mp_sides_players_names [ x ] &  - Blood God Died ] else
8597: LD_ADDR_OWVAR 47
8601: PUSH
8602: LD_OWVAR 47
8606: PUSH
8607: LD_OWVAR 19
8611: PUSH
8612: LD_VAR 0 2
8616: ARRAY
8617: PUSH
8618: LD_STRING  - Blood God Died
8620: STR
8621: PUSH
8622: EMPTY
8623: LIST
8624: ADD
8625: ST_TO_ADDR
8626: GO 8673
// display_strings = display_strings ^ [ mp_sides_players_names [ x ] &  - Sacrifise:  & BloodGods_CurrentKills [ x ] &  of 6 ] ;
8628: LD_ADDR_OWVAR 47
8632: PUSH
8633: LD_OWVAR 47
8637: PUSH
8638: LD_OWVAR 19
8642: PUSH
8643: LD_VAR 0 2
8647: ARRAY
8648: PUSH
8649: LD_STRING  - Sacrifise: 
8651: STR
8652: PUSH
8653: LD_EXP 63
8657: PUSH
8658: LD_VAR 0 2
8662: ARRAY
8663: STR
8664: PUSH
8665: LD_STRING  of 6
8667: STR
8668: PUSH
8669: EMPTY
8670: LIST
8671: ADD
8672: ST_TO_ADDR
// end ;
8673: GO 8441
8675: POP
8676: POP
// end ;
8677: LD_VAR 0 1
8681: RET
// export function InitBloodGods ; begin
8682: LD_INT 0
8684: PPUSH
// BloodGods = [ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ] ;
8685: LD_ADDR_EXP 61
8689: PUSH
8690: LD_INT 1
8692: NEG
8693: PUSH
8694: LD_INT 1
8696: NEG
8697: PUSH
8698: LD_INT 1
8700: NEG
8701: PUSH
8702: LD_INT 1
8704: NEG
8705: PUSH
8706: LD_INT 1
8708: NEG
8709: PUSH
8710: LD_INT 1
8712: NEG
8713: PUSH
8714: LD_INT 1
8716: NEG
8717: PUSH
8718: LD_INT 1
8720: NEG
8721: PUSH
8722: EMPTY
8723: LIST
8724: LIST
8725: LIST
8726: LIST
8727: LIST
8728: LIST
8729: LIST
8730: LIST
8731: ST_TO_ADDR
// BloodGods_LastKills = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
8732: LD_ADDR_EXP 62
8736: PUSH
8737: LD_INT 0
8739: PUSH
8740: LD_INT 0
8742: PUSH
8743: LD_INT 0
8745: PUSH
8746: LD_INT 0
8748: PUSH
8749: LD_INT 0
8751: PUSH
8752: LD_INT 0
8754: PUSH
8755: LD_INT 0
8757: PUSH
8758: LD_INT 0
8760: PUSH
8761: EMPTY
8762: LIST
8763: LIST
8764: LIST
8765: LIST
8766: LIST
8767: LIST
8768: LIST
8769: LIST
8770: ST_TO_ADDR
// BloodGods_CurrentKills = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
8771: LD_ADDR_EXP 63
8775: PUSH
8776: LD_INT 0
8778: PUSH
8779: LD_INT 0
8781: PUSH
8782: LD_INT 0
8784: PUSH
8785: LD_INT 0
8787: PUSH
8788: LD_INT 0
8790: PUSH
8791: LD_INT 0
8793: PUSH
8794: LD_INT 0
8796: PUSH
8797: LD_INT 0
8799: PUSH
8800: EMPTY
8801: LIST
8802: LIST
8803: LIST
8804: LIST
8805: LIST
8806: LIST
8807: LIST
8808: LIST
8809: ST_TO_ADDR
// BloodGods_Positions = [ [ 60 , 47 ] , [ 82 , 26 ] , [ 124 , 45 ] , [ 147 , 90 ] , [ 126 , 112 ] , [ 84 , 92 ] , [ 106 , 73 ] , [ 106 , 73 ] ] ;
8810: LD_ADDR_EXP 64
8814: PUSH
8815: LD_INT 60
8817: PUSH
8818: LD_INT 47
8820: PUSH
8821: EMPTY
8822: LIST
8823: LIST
8824: PUSH
8825: LD_INT 82
8827: PUSH
8828: LD_INT 26
8830: PUSH
8831: EMPTY
8832: LIST
8833: LIST
8834: PUSH
8835: LD_INT 124
8837: PUSH
8838: LD_INT 45
8840: PUSH
8841: EMPTY
8842: LIST
8843: LIST
8844: PUSH
8845: LD_INT 147
8847: PUSH
8848: LD_INT 90
8850: PUSH
8851: EMPTY
8852: LIST
8853: LIST
8854: PUSH
8855: LD_INT 126
8857: PUSH
8858: LD_INT 112
8860: PUSH
8861: EMPTY
8862: LIST
8863: LIST
8864: PUSH
8865: LD_INT 84
8867: PUSH
8868: LD_INT 92
8870: PUSH
8871: EMPTY
8872: LIST
8873: LIST
8874: PUSH
8875: LD_INT 106
8877: PUSH
8878: LD_INT 73
8880: PUSH
8881: EMPTY
8882: LIST
8883: LIST
8884: PUSH
8885: LD_INT 106
8887: PUSH
8888: LD_INT 73
8890: PUSH
8891: EMPTY
8892: LIST
8893: LIST
8894: PUSH
8895: EMPTY
8896: LIST
8897: LIST
8898: LIST
8899: LIST
8900: LIST
8901: LIST
8902: LIST
8903: LIST
8904: ST_TO_ADDR
// ClearHumansKilled ;
8905: CALL_OW 516
// end ; end_of_file
8909: LD_VAR 0 1
8913: RET
// export function warrior ; var i , c , k ; begin
8914: LD_INT 0
8916: PPUSH
8917: PPUSH
8918: PPUSH
8919: PPUSH
// if def_warrior then
8920: LD_EXP 18
8924: IFFALSE 9051
// begin for c = 1 to 8 do
8926: LD_ADDR_VAR 0 3
8930: PUSH
8931: DOUBLE
8932: LD_INT 1
8934: DEC
8935: ST_TO_ADDR
8936: LD_INT 8
8938: PUSH
8939: FOR_TO
8940: IFFALSE 9049
// if FilterAllUnits ( [ [ f_side , c ] , [ f_nation , nation_arabian ] ] ) then
8942: LD_INT 22
8944: PUSH
8945: LD_VAR 0 3
8949: PUSH
8950: EMPTY
8951: LIST
8952: LIST
8953: PUSH
8954: LD_INT 23
8956: PUSH
8957: LD_INT 2
8959: PUSH
8960: EMPTY
8961: LIST
8962: LIST
8963: PUSH
8964: EMPTY
8965: LIST
8966: LIST
8967: PPUSH
8968: CALL_OW 69
8972: IFFALSE 9047
// begin k = c ;
8974: LD_ADDR_VAR 0 4
8978: PUSH
8979: LD_VAR 0 3
8983: ST_TO_ADDR
// i = FilterAllUnits ( [ [ f_nation , nation_arabian ] , [ f_class , class_soldier ] , [ f_side , k ] ] ) [ 1 ] ;
8984: LD_ADDR_VAR 0 2
8988: PUSH
8989: LD_INT 23
8991: PUSH
8992: LD_INT 2
8994: PUSH
8995: EMPTY
8996: LIST
8997: LIST
8998: PUSH
8999: LD_INT 25
9001: PUSH
9002: LD_INT 1
9004: PUSH
9005: EMPTY
9006: LIST
9007: LIST
9008: PUSH
9009: LD_INT 22
9011: PUSH
9012: LD_VAR 0 4
9016: PUSH
9017: EMPTY
9018: LIST
9019: LIST
9020: PUSH
9021: EMPTY
9022: LIST
9023: LIST
9024: LIST
9025: PPUSH
9026: CALL_OW 69
9030: PUSH
9031: LD_INT 1
9033: ARRAY
9034: ST_TO_ADDR
// setclass ( i , class_desert_warior ) ;
9035: LD_VAR 0 2
9039: PPUSH
9040: LD_INT 11
9042: PPUSH
9043: CALL_OW 336
// end ;
9047: GO 8939
9049: POP
9050: POP
// end ; end ;
9051: LD_VAR 0 1
9055: RET
